HTTP 的 multipart/form-data 编码通常用于文件上传,允许客户端发送文本和单个请求中的二进制数据。虽然 Apache Commons HttpClient 3.x 支持此功能,但它在版本 4.0 中被删除。本文探讨了支持多部分/表单数据 POST 请求的替代 Java 库。
尽管联系了 HttpClient 项目,但还没有已知的努力来重新实现多部分支持。因此,开发人员必须寻求替代解决方案来满足他们的多部分/表单数据需求。
解决方案
HttpClient 4.x,当前的稳定版本,提供了更现代的用于处理多部分请求的 API。以下是使用更新后的 API 的示例:
CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost uploadFile = new HttpPost("..."); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addTextBody("field1", "yes", ContentType.TEXT_PLAIN); File f = new File("[/path/to/upload]"); builder.addBinaryBody( "file", new FileInputStream(f), ContentType.APPLICATION_OCTET_STREAM, f.getName() ); HttpEntity multipart = builder.build(); uploadFile.setEntity(multipart); CloseableHttpResponse response = httpClient.execute(uploadFile); HttpEntity responseEntity = response.getEntity();
对于仍在使用 HttpClient 4.0(不推荐)的开发人员,以下代码片段使用已弃用的 API:
HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); FileBody bin = new FileBody(new File(fileName)); StringBody comment = new StringBody("Filename: " + fileName); MultipartEntity reqEntity = new MultipartEntity(); reqEntity.addPart("bin", bin); reqEntity.addPart("comment", comment); httppost.setEntity(reqEntity); HttpResponse response = httpclient.execute(httppost); HttpEntity resEntity = response.getEntity();
其他 Java 库支持多部分/表单数据 POST 请求包括:
以上是如何在 Java 中发出多部分/表单数据 POST 请求?的详细内容。更多信息请关注PHP中文网其他相关文章!