1、推送附件 filebody
/**
* 推送附件方法
* @param args
*/
public static void main2(String[] args){ CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
try {
httpClient = HttpClients.createDefault(); // 把一个普通参数和文件上传给下面这个地址 是一个servlet
HttpPost httpPost = new HttpPost("http://localhost:8088/api/xfSystemToJsxf/acceptOutSystemUpload");
// 请求头设置token值
httpPost.setHeader("token", "8c17f4d7-c53a-42e3-aa22-8f3f8e41f25e");
StringBody extendId = new StringBody("705d7630-d097-4a4c-806e-61b0cd50ba2f", ContentType.create(
"text/plain", "utf-8"));
StringBody extendCaseCode = new StringBody("NJ12369", ContentType.create(
"text/plain", "utf-8"));
// 相当于<input type="text" name="extendId" value=extendId>
MultipartEntityBuilder meb = MultipartEntityBuilder.create()
.addPart("extendId", extendId)
.addPart("extendCaseCode", extendCaseCode);
List<FileBody> fileBodyList=new ArrayList<>();
fileBodyList.add(new FileBody(new File("C:\\Users\\wangmq\\Desktop\\附件1.docx")));
fileBodyList.add(new FileBody(new File("C:\\Users\\wangmq\\Desktop\\附件2.doc")));
for(int i=0; i<fileBodyList.size(); i++){
FileBody fileBody=fileBodyList.get(i);
// 把文件转换成流对象FileBody
StringBody fileName = new StringBody(fileBody.getFilename(), ContentType.create(
"text/plain", "utf-8"));
meb.addPart("fileName"+i, fileName);
meb.addPart("fileBody"+i, fileBody);
}
// setMode(HttpMultipartMode.RFC6532)解决文件名中文成?的问题
HttpEntity reqEntity = meb.setMode(HttpMultipartMode.RFC6532).build();
httpPost.setEntity(reqEntity); // 发起请求 并返回请求的响应
response = httpClient.execute(httpPost); System.out.println("响应状态码==========" + response.getStatusLine());
System.out.println("响应头===========" + response.getLastHeader("fileResult")); // 获取响应对象
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
// 打印响应长度
System.out.println("Response content length: " + resEntity.getContentLength());
// 打印响应内容
System.out.println(EntityUtils.toString(resEntity, Charset.forName("UTF-8")));
} // 销毁
EntityUtils.consume(resEntity);
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if(response != null){
response.close();
}
} catch (IOException e) {
e.printStackTrace();
} try {
if(httpClient != null){
httpClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

2、接收推送的附件 filebody

@ResponseBody
@RequestMapping(value = "/acceptJsxfManageFile", method = RequestMethod.POST)
public JsonResult acceptJsxfManageFile(HttpServletRequest request, HttpServletResponse response){
JsonResult jsonResult = JsonResult.getSuccessResult();
try {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 开始保存附件
String jsxfManageFilePath = ConfigUtil.getConfigValueByKey("jsxfManageFilePath");
File uploadFile = new File(jsxfManageFilePath);
if (!uploadFile.exists()) {
uploadFile.mkdirs();
}
// 检测是不是存在上传文件
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
DiskFileItemFactory factory = new DiskFileItemFactory();
//指定在内存中缓存数据大小,单位为byte,这里设为50Mb
factory.setSizeThreshold(50*1024*1024);
//设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
factory.setRepository(new File("C:\\temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// 指定单个上传文件的最大尺寸,单位:字节,这里设为50Mb
upload.setFileSizeMax(50 * 1024 * 1024);
//指定一次上传多个文件的总尺寸,单位:字节,这里设为99Mb
upload.setSizeMax(99 * 1024 * 1024);
upload.setHeaderEncoding("UTF-8");
List<FileItem> items = null;
// 解析request请求
items = upload.parseRequest(request);
// 外部系统案件主键id
String extendId = "";
if(items!=null){
//解析表单项目
Iterator<FileItem> iter = items.iterator();
// MultipartEntityBuilder对象的addPart设置参数是有序的,就按照设置的先后自然顺序排列
// 遍历变化的fileStatus
String fileStatusIter = "";
String fileNameIter = "";
int acceptFileNum = 0;
while (iter.hasNext()) {
FileItem item = iter.next();
//如果是普通表单属性
if (item.isFormField()) {
//相当于input的name属性 <input type="text" name="content">
String name = item.getFieldName();
//input的value属性
String value = item.getString();
if("extendId".equals(name)){
extendId = value;
}
// 设置遍历变化的fileStatus
if(name.indexOf("fileStatus")!=-1){
fileStatusIter = value;
}
// 设置遍历变化的filename
if(name.indexOf("fileName")!=-1){
fileNameIter = value;
}
} else {
// 是文件,加一层文件夹路径,文件夹名为外部系统案件主键id
String uploadPathExtendId = jsxfManageFilePath+"\\"+extendId+"\\";
File uploadPathExtendIdDir = new File(uploadPathExtendId);
if(!uploadPathExtendIdDir.exists()){
uploadPathExtendIdDir.mkdirs();
}
//属性名
String fieldName = item.getFieldName();
//上传文件路径
// String fileName = item.getName();
String fileName = fileNameIter;
fileName = fileName.substring(fileName.lastIndexOf("/") + 1);// 获得上传文件的文件名
// 文件输出流写到本地硬盘保存
item.write(new File(uploadPathExtendIdDir, fileName));
acceptFileNum ++;
// 插入中间库案件和附件的关联信息
if(systemService.addLocaleSurvey(fileStatusIter, extendId, uploadPathExtendId, fileName, ComplainContant.JSXF_MANAGE_FILE)){
jsonResult.setTotal(acceptFileNum);
}
}
}
}
}
}catch (Exception e){
jsonResult.setSuccess(false);
e.printStackTrace();
}finally {
return jsonResult;
}
}

3、j将自己文件打包,供别人获取

@ResponseBody
@RequestMapping(value = "takeOutSystemUpload")
public void takeOutSystemUpload(@RequestBody DataSyncParam dataSyncParam, HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
OutputStream out = response.getOutputStream();
ZipOutputStream zos = new ZipOutputStream(out);
// 外部系统案件主键id
String extendId = dataSyncParam.getExtendId();
try {
if(StringUtils.isNullOrEmpty(extendId)){
response.setStatus(4003);
response.setHeader("fileResult", "error, extendId is null");
}else{
// 根据extendid找到文件夹,遍历获取要打包的多个文件
String filePathNameDir = ConfigUtil.getConfigValueByKey("outSystemUploadPath")+extendId+"\\";
File[] fileArray = new File(filePathNameDir).listFiles();
if(fileArray == null){
response.setStatus(4004);
response.setHeader("fileResult","error, extendId is invalid");
}else{
int takeFileNum = 0;
for(File file : fileArray){
ZipEntry entry = new ZipEntry(file.getName());
zos.putNextEntry(entry);
byte [] bytes = new byte[1024];
int len;
FileInputStream in = new FileInputStream(file);
while((len = in.read(bytes)) != -1) {
zos.write(bytes, 0, len);
}
takeFileNum++;
zos.closeEntry();
in.close();
}
response.setStatus(200);
response.setHeader("fileResult","success, return "+takeFileNum+" files successfully");
}
}
} catch (Exception e) {
response.setStatus(-1);
e.printStackTrace();
}finally {
if(zos != null) {
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

4、获取打包的附件

public static void main4(String[] args){
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
Map<String, String> params = new HashMap<>();
String extendId = "705d7630-d097-4a4c-806e-61b0cd50ba2f";
params.put("extendId", extendId);
//发送http请求,并处理返回的zip包
HttpPost httpPost = new HttpPost("http://localhost:8088/api/xfSystemToJsxf/takeJsxfManageFile");
httpPost.addHeader("token", "c279adad-0cb0-4d3c-9436-644d513c41fa");
MultipartEntityBuilder builder = MultipartEntityBuilder.create().setCharset(Charset.forName("utf-8"));
String value = "";
if (params != null) {
for (String key : params.keySet()) {
value = (String)params.get(key);
if (value == null) value = "";
builder.addTextBody(key, value, ContentType.APPLICATION_JSON);
}
}
HttpEntity multipart = builder.setMode(HttpMultipartMode.RFC6532).build();
httpPost.setEntity(multipart);
Map<String, Object> map = new HashMap<>();
try {
httpClient = HttpClients.createDefault();
response = httpClient.execute(httpPost);
String[] statusLineArray = response.getStatusLine().toString().split(" ");
System.out.println("响应状态吗===========" + response.getStatusLine());
System.out.println("响应头===========" + response.getLastHeader("fileResult"));
if("200".equals(statusLineArray[1])){
try {
HttpEntity entity = response.getEntity();//从response里获取数据实体
InputStream in = entity.getContent();//获取数据流
Charset c = Charset.forName("UTF-8");
ZipInputStream zin = new ZipInputStream(in, c);//封装成zip输入流
BufferedOutputStream bos = null;
ZipEntry ze;
// // 加一层文件夹路径,文件夹名为外部系统案件主键id
String path = "C:\\Users\\wangmq\\Desktop\\outSystemManageFile\\"+extendId+"\\";
File filePathDir = new File(path);
if(!filePathDir.exists()){
filePathDir.mkdirs();
}
File file = null;
while((ze = zin.getNextEntry()) != null) {//循环zip输入流,获取每一个文件实体
file = new File(path + ze.getName());//生成file(如果文件路径不存在,先创建)
FileOutputStream fos = new FileOutputStream(file);
int len;
byte [] bytes = new byte[2048];
bos = new BufferedOutputStream(fos,2048);
while((len = zin.read(bytes, 0, 2048)) != -1) {
bos.write(bytes, 0, len);
}
bos.flush();
bos.close();
}
zin.close();//关闭输入流
}catch(Exception e){
e.printStackTrace();
} finally {
if (response != null) response.close();
}
}
} catch (IOException e) {
logger.error("获取附件发送异常" + e);
} }

http接口实现附件对接的更多相关文章

  1. 【python接口自动化】- 对接各大数据库

    相信很多小伙伴在使用python进行自动化测试的时候,都会涉及到数据库数据校验的问题,在前面的随笔中就已经有讲过连接mysql的使用,今天给大家汇总一下python对接几大常用的数据库操作的方法!众所 ...

  2. Web Api 与 Andriod 接口对接开发经验

    最近一直急着在负责弄Asp.Net Web Api 与 Andriod 接口开发的对接工作! 刚听说要用Asp.Net Web Api去跟 Andriod 那端做接口对接工作,自己也是第一次接触Web ...

  3. Asp.Net Web Api 与 Andriod 接口对接开发经验,给小伙伴分享一下!

    最近一直急着在负责弄Asp.Net Web Api 与 Andriod 接口开发的对接工作! 刚听说要用Asp.Net Web Api去跟 Andriod 那端做接口对接工作,自己也是第一次接触Web ...

  4. 基于PHP的对接电子面单接口平台案例

    电子面单接口目前有三种对接方式,快递电子面单接口.菜鸟电子面单接口和快递鸟电子面单接口.这三种接口各有特点. 一.电子面单接口定义 1. 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必 ...

  5. Asp.Net Web Api 与 Andriod 接口对接开发

    Asp.Net Web Api 与 Andriod 接口对接开发经验,给小伙伴分享一下!   最近一直急着在负责弄Asp.Net Web Api 与 Andriod 接口开发的对接工作! 刚听说要用A ...

  6. 基于PHP的对接免费电子面单接口平台的案例-快宝开放平台

    一.电子面单对接平台 电子面单对接平台分为两类: 1 .各大快递公司自有的电子面单接口开放平台:对接起来麻烦,需要每个快递公司分别调试接口,费时费力. 2 .第三方快递开放平台:如快宝开放平台(htt ...

  7. C# 对接Https接口

    最近公司项目需要对接Https接口,将对接的代码整理如下: public void Get() { HttpWebRequest request = null; request = WebReques ...

  8. 《java JDK7 学习笔记》之接口与多态

    1.对于"定义行为"也就是接口,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public修饰的. 类要操作接口,必须使用imp ...

  9. 禅道PMS兼容redmine用户认证接口

    项目地址:https://github.com/web3d/zentao-redmine-userauth zentao-redmine-userauth 做了一个基本的用户认证接口,兼容redmin ...

随机推荐

  1. Mysql数据库基础知识(全)

    前言:本博文为个人笔记,记录了Mysql的一些基本操作,一般掌握本博文就可以了解数据库.表.数据项的增删改查,希望对大家的学习有所帮助. 首先下载PHPSTUDY,将Mysql配置为系统变量. 具体操 ...

  2. XCTF-Web进阶-upload1

    显然是让我们上传文件,思路当然是上传一个木马文件,然后通过蚁剑连接查看目录获取flag. 但是当我们想要上传php文件的时候会出现弹窗,并且连"上传"按钮都被禁用了. ext = ...

  3. 【LeetCode】39. 组合总和

    39. 组合总和 知识点:递归:回溯:组合:剪枝 题目描述 给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数  ...

  4. Python断言及常用断言函数总结

    Python断言 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Python 解释器会报 As ...

  5. 1016 Phone Bills (25分)

    复建的第一题 理解题意 读懂题目就是一个活,所以我们用观察输出法,可以看出来月份,以及时间和费用之间的关系. 定义过程 然后时间要用什么来记录呢?day hour minute 好麻烦呀..用字符串吧 ...

  6. 【Mongodb】数据库备份与还原

    Mongodb 备份与还原 Mongodb 备份与还原 文件快照 快照备份 快照直接还原 从压缩文件还原 复制文件 备份文件 从文件还原 mongodump mongodump备份 mongodump ...

  7. 「移动端」Web页面适配

    一.什么是移动端适配 移动端 Web 页面,就是常说的手机 h5页面.webview页面.公众号开发的网页等. 由于手机机型较多,各个手机的屏幕尺寸不一样,所以做移动端页面,需要考虑在安卓和ios的各 ...

  8. Django推导 安装等

    HTTP协议补充 四大特性: 基于请求响应 基于TCP/IP协议之上的应用层协议 无状态 不能保存用户信息(cookie,session,token) 短链接 请求数据格式: 请求首行(请求方式,ht ...

  9. Clusternet - 新一代开源多集群管理与应用治理项目

    作者 徐迪,腾讯云容器技术专家. 汝英哲,腾讯云高级产品经理. 摘要 在过去的数年里,云计算领域经历了多次巨大的变革,当前越来越多的组织将应用部署在本地和云上的多个基础设施平台上,这些平台可能是两个公 ...

  10. 【RPC】远程接口调用实例 的几种方式比较

    pring中,用JMS搞RPC时会用到: org.springframework.jms.remoting.JmsInvokerServiceExporter org.springframework. ...