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

maven引入httpClient依赖

org.apache.httpcomponents

httpcore

4.4.13

org.apache.httpcomponents

httpclient

4.5.12

org.apache.httpcomponents

httpmime

4.5.12

以上依赖是笔者成文时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表单中其他的参数,可解析返回来的result拿到自己想拿的信息。

java http 上传文件_java利用httpClient实现后台文件上传请求相关推荐

  1. java excel 导入 加校验_Java 利用POI进行excel文件导入时校验数据,并且追加错误批注...

    首先拿到前端file控件上传的excel文件,到后台接收!拿到excel这就不多说了网上很多demo的,下面直接说校验单元格追加批注信息的 private void setpz(Workbook wo ...

  2. java struts2上传文件_java Struts2框架下实现文件上传功能

    本文实例为大家分享了struts2框架实现文件上传的方法,供大家参考,具体内容如下 struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 xmlns ...

  3. java form 上传文件_java通过表单进行文件上传的几种方法

    上传文件的分类: 无论什么方式上传文件,都要用post提交 方式一: 前端:表单方式上传文件 后端: 使用上传技术是apache中的Commons-fileupload.jar commons-io. ...

  4. java https post get请求_JAVA利用HttpClient进行POST和GET请求(HTTPS)

    目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用JQuery post进行请求. 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的p ...

  5. java实现qq空间模块_Java实现模拟QQ空间图片上传

    Java实现模拟QQ空间图片上传 首先看效果: 首先编写我们的上传jsp代码,如下: pageEncoding="UTF-8"%> html PUBLIC "-// ...

  6. dos如何访问服务器文件,如何利用DOS命令将文件上传到服务器

    在天下网吧-网吧系统-网吧天下栏目上一篇文章中,我们看到了:希望对各位网吧网管或者网吧维护,做网吧系统的各位大大有用,那么今天我们一起来看下:如何利用DOS命令将文件上传到服务器 在前面的文章中我们曾 ...

  7. java通知图库更新视频_Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能...

    视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...

  8. java excel 逐行读取_java利用poi读取Excel文件

    java读取Excel文件,笔者认为:从结构上来看,Excel文件是由一个一个的单元格组成的,有点像细胞cell,逐行的排列.那么我们读的时候也应该逐行逐行的读,从左到右的寻找每一个cell. 直播电 ...

  9. java 解压文件_java实现解压zip文件,(亲测可用)!!!!!!

    项目结构: Util.java内容: package com.cfets.demo; import java.io.File; import java.io.FileOutputStream; imp ...

最新文章

  1. C++中的接口(抽象类)
  2. [Bash Shell] Shell学习笔记
  3. Actionscript3.0动画编程中的几种特效举例
  4. python爬虫教程下载-Python爬虫入门教程!手把手教会你爬取网页数据
  5. linux PAM模块
  6. 列表表格以及媒体元素
  7. charles 手机抓包设置
  8. 查找发布地图的 REST URL并查询相关信息
  9. 核心API最佳实践——JDK日志分级
  10. (38)FPGA数码管驱动设计(第8天)
  11. 联邦快递就华为包裹被转运致歉 称有关货件正退回发货方
  12. C++中的日期和时间 time_t与struct tm转换
  13. keras + tensorflow 基本使用 —— backend
  14. python类 析构方法
  15. 大话跨度原始服务器信息怎么去除,大话西游2合服历史:独家整理 寻找你最初的服务器...
  16. 东芝300d硒鼓清零代码_东芝300d怎么清?
  17. No signature of method: build_*.android() is applicable for argument types
  18. 移动终端浏览器初始设置apple-mobile-web-app-capable(转)
  19. AE学习日记之MapControl与PageLayoutControl图层变化同步
  20. 9139 位艺人在 Python 面前不值一提 # Python 爬虫小课 5-9

热门文章

  1. 鸿蒙系统什么时候超过苹果,为何任正非说鸿蒙系统想超过苹果系统需要的时间,不会超过300年...
  2. vue v-if判断数组元素的值_Vue项目上线做的一些基本优化
  3. 无线 在linux叫什么地方,请问有知道atheros无线网卡Linux驱动官方下载地址是什么吗?...
  4. linux优先级队列,Python3 线程优先级队列( Queue)
  5. php鼠标悬停显示图片,鼠标滑过出现预览的大图提示效果
  6. CPU8085 8086名字的由来
  7. WINCE6.0 DM.EXE 激活驱动失败的原因之一
  8. jni c call java_Java通过-jni调用c语言
  9. 【转】Jenkins详细教程
  10. .netcore持续集成测试篇之MVC层单元测试