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. ReentrantLock 中的 4 个坑!

    JDK 1.5 之前 synchronized 的性能是比较低的,但在 JDK 1.5 中,官方推出一个重量级功能 Lock,一举改变了 Java 中锁的格局.JDK 1.5 之前当我们谈到锁时,只能 ...

  2. gRPC学习之四:实战四类服务方法

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. Linux中的账号权限管理

    一.用户账号和组账号概述 Linux基于用户身份对资源访问进行控制 1.1.用户账号 超级用户:root 用户是 Linux 操作系统中默认的超级用户账号,对本主机拥有最高的权限.系统中超级用户是唯一 ...

  4. 【原创】oracle提权执行命令工具oracleShell v0.1

    帮一个兄弟渗透的过程中在内网搜集到了不少oracle连接密码,oracle这么一款强大的数据库,找了一圈发现没有一个方便的工具可以直接通过用户名密码来提权的.想起来自己之前写过一个oracle的连接工 ...

  5. DVWA(一):关于DVWA的基本介绍

    一.关于DVWA的搭建及报错问题: 传送门 上面链接主要解决安装DVWA报错的问题,这里防止自己再去找,所以记一下. (1)安装DVWA需要一个web环境,我实在win2003系统(xss_uploa ...

  6. 常见web中间件漏洞(五)weblogic漏洞

    继续整理有关中间件漏洞思路(仅做简单思路整理,不是复现,复现请参考大佬们的长篇好文,会在文章中列举部分操作) WebLogic是Oracle公司出品的一个application server,确切的说 ...

  7. Sqli-Labs less1-4

    首先,记录一下基础知识,可能不全: 几个常用的函数: 1.version()   --Mysql版本 2.user()  --数据库用户名 3.database()  --数据库名 4.@@datad ...

  8. 003 TCP/IP协议详解(二)

    一.ping ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分.利用"ping"命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障. 例如:当我们某一 ...

  9. springboot整合多数据源解决分布式事务

    一.前言        springboot整合多数据源解决分布式事务.             1.多数据源采用分包策略              2.全局分布式事务管理:jta-atomikos. ...

  10. 《深入理解Spring Cloud与微服务构建》学习笔记(二十)~配置中心Spring Cloud Config

    本例重新创建项目,构建一个空的mavan工程. 一.Config Server 从本地读取配置文件 新建一个moudle config_server ,pom添加依赖   <dependency ...