本示例演示了如何使用Apache HttpClient库进行分段上传。在此示例中,我们上传了一个文件。我们首先创建要上传文件的对象。该FileBody代表文件的二进制身体部位。
接下来,通过创建MultipartEntityBuilder的实例来准备HttpEntity对象。向该对象添加部分,在本例中,我们添加fileBody。我们可以添加多个部分到这个对象的名称说。它可以是字符串、文件等,就像我们在普通web表单中所做的那样。
builder对象的build()方法完成实体创建并返回HttpEntity对象。为了发送/上传到服务器,我们创建一个HttpPost请求并设置要发布的实体。最后,HttpClient对象的execute()方法将multipart对象发送到服务器。
package org.nhooo.example.httpclient; import org.apache.http.HttpEntity; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.HttpClientBuilder; import java.io.File; import java.io.IOException; public class HttpPostMultipartExample { public static void main(String[] args) { File file = new File("data.zip"); FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); builder.addPart("file", fileBody); HttpEntity entity = builder.build(); HttpPost request = new HttpPost("http://localhost:8080/upload"); request.setEntity(entity); HttpClient client = HttpClientBuilder.create().build(); try { client.execute(request); } catch (IOException e) { e.printStackTrace(); } } }
要在服务器上接收文件,可以在以下示例中查看servlet代码:如何创建基于Web的文件上载?
Maven依赖
<!-- https://search.maven.org/remotecontent?filepath=org/apache/httpcomponents/httpclient/4.5.9/httpclient-4.5.9.jar --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.9</version> </dependency> <!-- https://search.maven.org/remotecontent?filepath=org/apache/httpcomponents/httpmime/4.5.9/httpmime-4.5.9.jar --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.9</version> </dependency>