美文网首页
java利用httpClient实现后台文件上传请求

java利用httpClient实现后台文件上传请求

作者: haiyong6 | 来源:发表于2020-09-26 14:52 被阅读0次

之前写过基于html和js的文件上传方法java 用springMVC 和HttpServletRequest 两种实现文件上传的方法和httpClient后台执行普通post请求的文章java通过httpClient从接口请求数据入库以及自动生成实体工具类,最近接到一个需求,需要用到后台去调用远程服务器的文件上传接口实现文件上传,用到了httpClient的MultipartEntityBuilder实现。

maven引入httpClient依赖

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.13</version>
        </dependency><dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.12</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.12</version>
        </dependency>

以上依赖是笔者成文时maven最新的依赖包。

新建一个UploadFileUtil工具类:

package com.zhaohy.app.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
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.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UpLoadFileUtil {
    private static Logger logger = LoggerFactory.getLogger(UpLoadFileUtil.class);
    /**
     * 通过httpClient上传文件
     * @param fileName
     * @param path
     * @return 外部域名的下载url
     */
    public static String UploadFileByHttpClient(String fileName,String path, String url) {
        String result = "";
        CloseableHttpClient httpClient = HttpClients.createDefault();
        try {
            HttpPost httpPost = new HttpPost(url);
            //HttpMultipartMode.RFC6532参数的设定是为避免文件名为中文时乱码
            MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);
            httpPost.addHeader("header1", "111");//头部放文件上传的head可自定义
            File file = new File(path+fileName); //上传文件的路径 
            builder.addBinaryBody("file", file, ContentType.MULTIPART_FORM_DATA, fileName);
            builder.addTextBody("params1", "1");//其余参数,可自定义
            builder.addTextBody("params2", "2");
            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost);// 执行提交
            HttpEntity responseEntity = response.getEntity();//接收调用外部接口返回的内容
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
            // 返回的内容都在content中
            InputStream content = responseEntity.getContent();
            // 定义BufferedReader输入流来读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            if(!AppFrameworkUtil.isBlank(result)) {
                logger.info("上传文件"+fileName+"返回参数==>"+result);
            }else {
                logger.error("上传文件失败:返回result为null");
            }
            
        }
        }catch(Exception e) {
            logger.error("上传文件失败:",e);
        }finally {//处理结束后关闭httpclient的链接
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
         
        return result;
    }
}

上面代码中 fileName是文件名称,本地文件路径,url是远程上传接口url,通过httpPost.addHeader来自定义header参数,builder.addTextBody来自定义其他参数,相当于html中form表单中其他的<input>参数,可解析返回来的result拿到自己想拿的信息。

相关文章

  • java利用httpClient实现后台文件上传请求

    之前写过基于html和js的文件上传方法java 用springMVC 和HttpServletRequest 两...

  • Java模拟post请求上传文件

    Java模拟post请求上传文件 Java代码实现/** * 模拟文件post上传 * @para...

  • 利用post上传实现图床转存到另外的服务器

    利用post上传实现图床转存到另外的服务器 uploadFile方法请查看Java模拟post请求上传文件

  • 2018-07-20

    java httpclient 模拟表单发送数据@ApiOperation(value = "上传文件", not...

  • FastHttpClient

    简单易用的httpclient 封装OkHttp3,对外提供了POST请求、GET请求、上传文件、下载文件、htt...

  • react-express文件上传

    前台使用superagent发送请求,后台使用express的multer实现文件的上传。 概述 使用expres...

  • HttpClient的基本使用

    使用的包 一个简单的httpClient实例 可以上传和下载文件的httpClient 以上http请求适用的接口...

  • 基于HttpClient的多线程上传

    了解HttpClient HttpClient是一个用来模拟浏览器发送http请求的java实现。我们可以通过编写...

  • 网络03

    NSURLSession实现文件上传 实现文件上传的步骤 文件上传设置请求体的格式 使用NSURLSession上...

  • php文件上传

    单文件上传实现: 文件上传代码参考:文件上传 多文件上传实现: 前台调用: shell方式 浏览器方式: 后台处理...

网友评论

      本文标题:java利用httpClient实现后台文件上传请求

      本文链接:https://www.haomeiwen.com/subject/yivcuktx.html