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. 自学linux——4.Linux的自有服务(基础篇)

    linux自有服务(内置) 一.运行级别(模式) 在Linux中存在一个进程:init,进程id是1. 查看进程:#ps -ef|grep init 对应的配置文件:inittab(运行级别配置文件位 ...

  2. 2019-07-06 sql备忘 连续取最大

    连续最大: SELECT M.* FROM #temp MINNER JOIN (SELECT ISNULL(A.score,0)-b.score AS score,B.id FROM #temp A ...

  3. UI_UE在线就业班(2)(Adobe Illustrator软件学习)

    Adobe Illustrator软件的使用     认识AIUI_UE在线就业班(2) .   ▼ AI是Adobe Illustrator的英文缩写,是Adobe公司旗下推出的一款基于矢量图形制作 ...

  4. Java练习——加减乘除计算器实现

    Java练习--计算器(加减乘除)  package method; import java.util.Scanner; /*  写一个计算器 实现加减乘除四个功能   并且能够用循环接收新的数据,通 ...

  5. Nacos 笔记

    Nacos 笔记 目录 Nacos 笔记 1. Nacos简介 1.1 主流配置中心对比 1.2 主流注册中心对比 1.3 Nacos特性 2. 安装启动 支持外部 MySQL 3. 配置管理 3.1 ...

  6. const变量通过指针修改问题

    const的变量在特定情况下可以通过指针修改,但是在另一些情况下是不能通过指针修改. 以下是VC6下才测试. 1. 不能修改的情况 #include int const a = 10; void ma ...

  7. 用三个while循环和tkinter实现一个显示屏

    用三个while循环和tkinter实现一个显示屏 import tkinter as tk import time # 输入框是跟程序打交道的一个途径,例如程序要求你输入账号密码,那么它就需要提供两 ...

  8. Dubbo系列讲解之扩展点实现原理分析【2万字分享】

    Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力.这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo ...

  9. cobaltstrike 框架简述

    关于cobalt strike,火起来也有好几年了,首先感谢大佬们慷慨相助愿意在网上分享和翻译相关资料,让这么好的渗透测试框架工具被更多人知道 那就来整理一下在使用这个框架的过程中我认为需要了解的小知 ...

  10. BUUCTF刷题系列(2)5.27日记

    CTF-Bugku-安卓篇1signin Writeup Bugku安卓部分第一题,第七届山东省大学生网络安全技能大赛的题目,属于Android逆向分析.(常用工具:安卓模拟器.JEB.Cyberch ...