如何使用JSoup发布文件?

Csa*_*abi 12 java post file-upload jsoup

我使用JSoup使用以下代码发布值:

Document document = Jsoup.connect("http://www......com/....php")
                    .data("user","user","password","12345","email","info@tutorialswindow.com")
                    .method(Method.POST)
                    .execute()
                    .parse();
Run Code Online (Sandbox Code Playgroud)

现在我也想提交一份文件.就像带有文件字段的表单一样.这可能吗 ?如果比怎么样?

Bal*_*usC 16

这仅在Jsoup 1.8.2(2015年4月13日)通过新data(String, String, InputStream)方法得到支持.

String url = "http://www......com/....php";
File file = new File("/path/to/file.ext");

Document document = Jsoup.connect(url)
    .data("user", "user")
    .data("password", "12345")
    .data("email", "info@tutorialswindow.com")
    .data("file", file.getName(), new FileInputStream(file))
    .post();
// ...
Run Code Online (Sandbox Code Playgroud)

在旧版本中,multipart/form-data不支持发送请求.您最好的选择是使用一个完整的HTTP客户端,例如Apache HttpComponents Client.您最终可以获取HTTP客户端响应,String以便将其提供给Jsoup#parse()方法.

String url = "http://www......com/....php";
File file = new File("/path/to/file.ext");

MultipartEntity entity = new MultipartEntity();
entity.addPart("user", new StringBody("user"));
entity.addPart("password", new StringBody("12345"));
entity.addPart("email", new StringBody("info@tutorialswindow.com"));
entity.addPart("file", new InputStreamBody(new FileInputStream(file), file.getName()));

HttpPost post = new HttpPost(url);
post.setEntity(entity);

HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
String html = EntityUtils.toString(response.getEntity());

Document document = Jsoup.parse(html, url);
// ...
Run Code Online (Sandbox Code Playgroud)


luk*_*sch 8

接受的答案在撰写本文时有效并且是正确的,但从那时起 JSoup 已经发展,并且自 1.8.2 版以来,可以将文件作为多部分形式的一部分发送

File file1 = new File("/path/to/file");
FileInputStream fs1 = new FileInputStream(file1);

Connection.Response response = Jsoup.connect("http://www......com/....php")
    .data("user","user","password","12345","email","info@tutorialswindow.com")            
    .data("file1", "filename", fs1)
    .method(Method.POST)
    .execute();
Run Code Online (Sandbox Code Playgroud)