Java如何使用HttpClient分段上传?

本示例演示了如何使用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>

Maven中央
Maven中央