httpclient 上传附件实例

httpclient 上传附件实例java

    /**
     * 上传附件
     * @param host
     * @param uri
     * @param filePath  文件路径
     * @param name  服务端定义的附件名
     * @param param  请求带的参数
     * @return
     */
    public String upload(String host, String uri, String filePath,String name, Map<String, String> param) {
        logger.info("*****************request*****************");
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        String url = host + uri ;
        String rst = "";
        try {
            httpClient = HttpClients.createDefault();
            logger.info("请求路径: "+ url);
            HttpPost httpPost = new HttpPost(url);
             //经过当前类的加载器来加载资源,调用getResourceAsStream()是保证和类类型同一个加载器加载
            InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filePath);
            File file = new File(filePath);
            MultipartEntityBuilder builder = MultipartEntityBuilder.create(); //建立MultipartEntityBuilder对象
        //添加上传的二进制文件
            builder.addBinaryBody(name, inputStream, ContentType.create("multipart/form-data",Consts.UTF_8), file.getName());  
            for (Map.Entry<String, String> entry : param.entrySet()) {
		        String key = entry.getKey();
		        String value = entry.getValue();
		        StringBody stringBody = new StringBody(value, create("text/plain", Consts.UTF_8)); //解决中文乱码问题
               //添加请求入参
		        builder.addPart(key, stringBody);
		        logger.info("请求参数:"+key+":"+ value);
            }
            HttpEntity reqEntity = builder.build();
            httpPost.setEntity(reqEntity);
              // 发起请求 并返回请求的响应
            response = httpClient.execute(httpPost);
               // 获取响应对象
            HttpEntity resEntity = response.getEntity();
            if (resEntity != null) {
		          // 打印响应内容
                rst = EntityUtils.toString(resEntity, Charset.forName("UTF-8")) ;
                logger.info("*****************response*****************");
                logger.info("响应结果: " +rst);
            }
             // 销毁
            EntityUtils.consume(resEntity);
            return rst;
        } catch (Exception e) {
            logger.info("出错啦: "+e.getMessage());
            e.printStackTrace();
            return "出错了";
        } finally {
            try {
		    if (response != null) {
		        response.close();
	        }
            } catch (IOException e) {
		        e.printStackTrace();
            }
		    try {
		    if (httpClient != null) {
                httpClient.close();
		    }
		    } catch (IOException e) {
		        e.printStackTrace();
		        }
        }
    } 

 调用方法web

    /**
       * @description: TODO 上传图片
       * @author : xxx
       * @date 2019/6/6 11:15
       */
    public String uploadImage() throws Exception {
        Map<String, String> params  = new HashMap<>();
        params.put("uploadType","1");
	  //文件放置resources目录下, 服务端定义接收附件名称为 imageFile
        String rst = upload("http://xxxx.com","/web/upload","picture/repaymentPic.jpg","imageFile",params);
        return rst;
    }

  

请求类型表:查看数组

基本步骤:

1.设置上传的模式;
  setMode(HttpMultipartMode mode),其中mode主要有BROWSER_COMPATIBLE,RFC6532,STRICT三种,默认值是STRICT。
2.建立MultipartEntityBuilder对象,并添加须要上传的数据;
 a.利用MultipartEntityBuilder.create()来建立对象;
 b.addBinaryBody:以二进制的形式添加数据,能够添加File、InputStream、byte[]类型的数据。
  addBinaryBody(String name, File file, ContentType contentType, String filename)
  addBinaryBody(String name, InputStream stream, ContentType contentType, String filename)
  addBinaryBody(String name, byte[] b, ContentType contentType, String filename)
 c.addTextBody:添加文本数据
  addTextBody(String name, String text, ContentType contentType)
 d.addPart:以Key/Value的形式添加ContentBody类型的数据
  addPart(String name, ContentBody contentBody)ui

MultipartEntityBuilder用法this

2.MultipartEntityBuilder这个类主要用于建立HttpEntity。它的主要方法有:编码

修饰符和类型url

方法和描述spa

MultipartEntityBuilder.net

addBinaryBody(String name, byte[] b) orm

将字节数组以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, byte[] b, ContentType contentType, String filename) 

将字节数组以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, File file) 

将文件以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, File file, ContentType contentType, String filename) 

将文件以二进制的形式添加数据。

MultipartEntityBuilder

addBinaryBody(String name, InputStream stream) 

MultipartEntityBuilder

addBinaryBody(String name, InputStream stream, ContentType contentType, String filename) 

将输入流以二进制的形式添加数据。

MultipartEntityBuilder

addPart(String name, ContentBody contentBody) 

添加ContentBody 类型的数据。

MultipartEntityBuilder

addTextBody(String name, String text) 

添加文本数据。

MultipartEntityBuilder

addTextBody(String name, String text, ContentType contentType) 

以指定的内容类型添加文本数据。

HttpEntity

build() 

建立一个HttpEntity。

static MultipartEntityBuilder

create() 

建立一个MultipartEntityBuilder对象。

MultipartEntityBuilder

setBoundary(String boundary) 

设置边界。

MultipartEntityBuilder

setCharset(Charset charset) 

设置请求的编码格式。

MultipartEntityBuilder

setLaxMode() 

MultipartEntityBuilder

setMode(HttpMultipartMode mode) 

设置模式。

MultipartEntityBuilder

setStrictMode() 

相关文章
相关标签/搜索