教程

pom文件需要引入依赖

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.8</version>
        </dependency>

 单类实现代码如下

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;

public class TestUpload {


    public static String FilePost(String url, File value) throws  Exception {
        String BOUNDARY = java.util.UUID.randomUUID().toString();
        MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, "--------------------"+BOUNDARY, Charset.defaultCharset());
        multipartEntity.addPart("categoryId",new StringBody("1",Charset.forName("UTF-8")));
        multipartEntity.addPart("storageType",new StringBody("1",Charset.forName("UTF-8")));
        multipartEntity.addPart("file", new FileBody(value));
        HttpPost request = new HttpPost(url);
        request.setEntity(multipartEntity);
        request.addHeader("Authorization","Basic c2FiZXI6c2FiZXJfc2VjcmV0");
        request.addHeader("Content-Type", "multipart/form-data; boundary=--------------------"+BOUNDARY);
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpResponse response = httpClient.execute(request);
        InputStream is = response.getEntity().getContent();
        BufferedReader in = new BufferedReader(new InputStreamReader(is));
        StringBuffer buffer = new StringBuffer();
        String line = "";
        while ((line = in.readLine()) != null) {
            buffer.append(line);
        }
        System.out.println("发送消息收到的返回:"+buffer);
        return buffer.toString();
    }

    public static void main(String[] args) throws Exception {
        ExecutorService es = Executors.newFixedThreadPool(20);
        while(true){
            Thread thread= new Thread(() ->{
                try {
                    FilePost("http://172.16.10.201:20010/unify-resource/oss/endpoint/put-file-attach",new File("C:\\Users\\liuya\\Desktop\\图书馆.bmz"));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
            es.execute(thread);
        }
    }
}

idea等编辑器里,run运行主方法。

相关知识

org.apache.httpcomponents 是 Apache HttpComponents 项目的 Java 客户端库,用于在 Java 中进行 HTTP 通信。该项目提供了一套用于处理 HTTP 请求和响应的工具和类库,使得开发者能够方便地进行 HTTP 请求、处理响应、管理连接等操作。下面对 org.apache.httpcomponents 的主要组件和功能进行详细解释。

  1. HttpClient 类 HttpClient 是 Apache HttpComponents 提供的一个核心类,用于发送 HTTP 请求并接收响应。可以创建 HttpClient 实例,并通过其提供的方法来执行各种类型的请求,如 GET、POST、PUT、DELETE 等。HttpClient 支持设置请求头、请求参数、超时时间等,并提供了丰富的 API 来处理响应。
  2. HttpRequest 和 HttpResponse 类 HttpRequest 和 HttpResponse 是 Apache HttpComponents 中的两个关键类。HttpRequest 表示一个 HTTP 请求,包含请求方法、URL、请求头、请求体等信息。HttpResponse 表示一个 HTTP 响应,包含状态码、响应头、响应体等信息。开发者可以使用这两个类来构建和处理 HTTP 请求和响应。
  3. HttpEntity 类 HttpEntity 表示 HTTP 消息的实体部分,它可以是请求的消息体或响应的消息体。HttpEntity 提供了获取和操作实体内容的方法,可以读取请求的数据,也可以设置响应的数据。HttpEntity 还支持不同类型的内容编码和传输方式,如二进制、文本、JSON、XML 等。
  4. NameValuePair 接口 NameValuePair 是一个接口,用于表示 HTTP 请求或响应中的一个键值对参数。可以通过实现该接口来创建请求参数或解析响应参数。NameValuePair 接口提供了 getKey() 和 getValue() 方法,分别用于获取键和值。
  5. HttpGet、HttpPost、HttpPut、HttpDelete 类 HttpGet、HttpPost、HttpPut 和 HttpDelete 是 Apache HttpComponents 提供的针对不同类型 HTTP 请求的具体实现类。这些类继承自 HttpRequestBase 类,并提供了对应请求类型的特定方法和属性。开发者可以使用这些类来创建 GET、POST、PUT 和 DELETE 请求,并设置相应的请求参数和请求头。
  6. HttpClientBuilder 类 HttpClientBuilder 是一个构建 HttpClient 实例的辅助类。通过 HttpClientBuilder,可以配置 HttpClient 的各种参数和属性,如连接池大小、连接超时时间、重试机制等。它提供了一系列方法来设置 HttpClient 的各种属性,并最终返回一个可用的 HttpClient 实例。
  7. CloseableHttpClient 接口 CloseableHttpClient 是 HttpClient 的子接口,它扩展了 AutoCloseable 接口。CloseableHttpClient 可以自动管理和释放与服务器的 HTTP 连接资源,确保连接的高效和正确关闭。
  8. HttpHost 类 HttpHost 是用于表示远程服务器主机信息的类。它包含主机名、端口号和协议类型等属性。可以使用 HttpHost 来构建请求的目标地址,并作为参数传递给 HttpClient 的请求方法。
  9. HttpParams 接口 HttpParams 是一个接口,用于表示 HTTP 请求的参数。它提供了一系列方法来设置和获取请求参数,如连接超时时间、Socket 缓冲区大小等。HttpParams 可以作为参数传递给 HttpClientBuilder 来配置 HttpClient 的属性。

总结: org.apache.httpcomponents 是 Apache HttpComponents 项目的 Java 客户端库,提供了丰富的类和接口来进行 HTTP 通信。通过 HttpClient、HttpRequest、HttpResponse、HttpEntity、NameValuePair、HttpGet、HttpPost、HttpPut、HttpDelete、HttpClientBuilder、CloseableHttpClient、HttpHost、HttpParams 等组件和功能,开发者可以方便地发送 HTTP 请求、处理响应、管理连接等操作。Apache HttpComponents 提供了灵活、可定制的 API 和机制,使得在 Java 中进行 HTTP 通信变得更加简单和高效。无论是编写网络爬虫、实现 RESTful API 客户端,还是进行 Web 应用程序的测试和调试,org.apache.httpcomponents 都是一个强大而受欢迎的工具集。