开发的时候碰到这样的需求:需要在一个系统(客户端发送请求)中将文件传输至另外一个系统(服务端接收)中去的实现方式,可以批量传输文件,代码如下:

客户端请求:

    public String upLoadFilePost(String actionUrl, Map<String, File> files) throws IOException {
String BOUNDARY = java.util.UUID.randomUUID().toString();
String PREFIX = "--", LINEND = "\r\n";
String MULTIPART_FROM_DATA = "multipart/form-data";
String CHARSET = "UTF-8";
URL uri = new URL(actionUrl);
HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
conn.setReadTimeout(5 * 1000);
conn.setDoInput(true);// 允许输入
conn.setDoOutput(true);// 允许输出
conn.setUseCaches(false);
conn.setRequestMethod("POST"); // Post方式
conn.setRequestProperty("connection", "keep-alive");
conn.setRequestProperty("Charsert", "UTF-8");
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
+ ";boundary=" + BOUNDARY); DataOutputStream outStream = new DataOutputStream(
conn.getOutputStream());
// 发送文件数据
if (files != null)
for (Map.Entry<String, File> file : files.entrySet()) {
StringBuilder sb1 = new StringBuilder();
sb1.append(PREFIX);
sb1.append(BOUNDARY);
sb1.append(LINEND);
sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""
+ file.getKey() + "\"" + LINEND);
sb1.append("Content-Type: application/octet-stream; charset="
+ CHARSET + LINEND);
sb1.append(LINEND);
outStream.write(sb1.toString().getBytes());
InputStream is = new FileInputStream(file.getValue());
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
} is.close();
outStream.write(LINEND.getBytes());
} // 请求结束标志
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
outStream.write(end_data);
outStream.flush(); // 得到响应码
int res = conn.getResponseCode();
if (res == 200) {
InputStream in = conn.getInputStream();
InputStreamReader isReader = new InputStreamReader(in);
BufferedReader bufReader = new BufferedReader(isReader);
String line = "";
String data = "";
while ((line = bufReader.readLine()) != null) {
data += line;
}
outStream.close();
conn.disconnect();
return data;
}
outStream.close();
conn.disconnect();
return null;
}

服务端接收接口方法体:

public String fileInteraction(HttpServletRequest request, HttpServletResponse response) throws Exception {
//操作成功则返回OK
String result = "";
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//解析request,将结果放置在list中
Map<String, List<MultipartFile>> fileMap = multiRequest.getMultiFileMap();
for (String key : fileMap.keySet()) {
List<MultipartFile> files = fileMap.get(key);
for (MultipartFile file : files) {
if (!file.isEmpty()) {
String fileNamePath = file.getOriginalFilename();
String[] params = fileNamePath.split("\\.");
String filename = "";
int i = 0;
for (String str : params) {
i = i + 1;
if (StringUtils.isNotEmpty(filename)) {
if (i==params.length) {
filename = filename + "." + str;
}else{
filename = filename + "/" + str;
}
}else{
filename = str;
}
}
// 文件保存路径
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/wxfile/" + filename;
File iFile = new File(filePath);
File iFileParent = iFile.getParentFile();
if(!iFileParent.exists()){
iFileParent.mkdirs();
}
// 转存文件
file.transferTo(new File(filePath));
result = "ok";
}
}
}
return result;
}

调用客户端调用发送请求方法:

     String actionUrl = "http://shuilangyizu.iask.in/liuf/utilController/fileInteraction.do";
Map<String, File> files = new HashMap<String, File>();
File file = new File(request.getSession().getServletContext().getRealPath("/") + "upload/temp/1.doc");
files.put("x."+file.getName(), file);
File file2 = new File(request.getSession().getServletContext().getRealPath("/") + "upload/temp/1.jpg");
files.put("y."+file2.getName(), file2);
String result = utilService.upLoadFilePost(actionUrl, files);

java文件传输接口的更多相关文章

  1. java文件传输之文件编码和File类的使用

    ---恢复内容开始--- 我们知道,在用户端和服务端之间存在一个数据传输的问题,例如下载个电影.上传个照片.发一条讯息.在这里我们 就说一下文件的传输. 1.文件编码 相信大家小时候玩过积木(没玩过也 ...

  2. java 接口 文件传输

    调用接收端 @ApiOperation(value = "文件请求展示方法") @RequestMapping(value = "/showFile", met ...

  3. java实现两台电脑间TCP协议文件传输

    记录下之前所做的客户端向服务端发送文件的小项目,总结下学习到的一些方法与思路. 注:本文参考自<黑马程序员>视频. 首先明确需求,在同一局域网下的机器人A想给喜欢了很久的机器人B发送情书, ...

  4. 文件传输基础——Java IO流

    一.文件的编码 package com.study.io; /** * 测试文件编码 */ public class EncodeDemo { /** * @param args * @throws ...

  5. 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)

    目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...

  6. Java基于Socket文件传输示例(转)

    最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加 ...

  7. Java简单文件传输 socket简单文件传输示例

    服务器端代码: import java.io.*; import java.net.*; /** * Created with IntelliJ IDEA. * User: HYY * Date: 1 ...

  8. java基于P2P的聊天和文件传输实例

    用java的NIO技术编写的 1. 支持聊天功能 2. 拖拽文件能够实现文件传输功能.也能够是目录 3. 启动时能够选择server端或client端启动 4. 本人原创.学习NIO和java的网络通 ...

  9. java实现文件传输

    在windows下装了个linux虚拟机,两者之间传输文件挺麻烦的.写了个简单的文件传输程序,来方便自己数据传送. server 端: import java.io.BufferedReader;im ...

随机推荐

  1. ViewPage+frament不预载入下一个Frament数据解决的方法

    在做一个ViewPage+Frament 滑动数效果,当滑动到每一页时载入哪一页的数据,可是ViewPage会预载入下一也数据.这个问题之前做项目是一直未解决,今天找到一个方法一下子就解决的这个问题, ...

  2. uva 11346 - Probability(概率)

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=2321">题目链接:uva 11346 - ...

  3. 通用ajax请求方法封装,兼容主流浏览器

    ajax简单介绍 没有AJAX会怎么样?普通的ASP.Net每次运行服务端方法的时候都要刷新当前页面. 假设没有AJAX,在youku看视频的过程中假设点击了"顶.踩".评论.评论 ...

  4. 《跟孩子学Python》

    1:Python对象之间的赋值是内容赋值而不是引用赋值 a = ["aaa","bbb","ccc"] b = a print a prin ...

  5. Oracle Data Integrator 12c----一致性 CDC(Consistent CDC)

    一致性 CDC 中引入了变化集的概念.一个变化集中可以包括多个相互存在关联关系(如主外键引用关系)的表.CDC 在捕获和发布一个变化集中的变化时能够保证数据的一致性.这个练习介绍如何使用能够保证一致性 ...

  6. 仿饿了么增加购物车旋转控件 - 自带闪转腾挪动画 的button

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 转载请标明出处: http://blog.csdn.net/zxt0601/article/details/54235736 本文出 ...

  7. Excel之定位和查找

    在数据量比较少的情况下,我们要到达Excel中某一位置时,通常会用鼠标拖动滚动条到达需要的位置,查找某已知固定的值,用Ctr+F,在查找内容中输入对应的值即可一个个的查找到其对应的位置.但当数据量较多 ...

  8. django之异常错误

    现象:最近需要抓取一些网页的信息,但发现Python的乱码问题相对Java来说,不太一样.按照以往Java解决中文乱码问题的思路去解决Python乱码,貌似行不通,报错信息: SyntaxError: ...

  9. 转:Delta3D Editor编译成功

    下载:     官网 www.delta3d.org 有些地方访问不了(试试这个代理:133.1.74.163 3128),我在公司就访问不了,但是住的地方就可以.但是sourceforge是可以访问 ...

  10. Dynamics CRM 2015 Update 1 系列(4): 自己定义主键 - Alternate Keys

    Alternate Keys. 还是和系统集成相关的一个重量级Feature.使用该Feature能极大的提高开发数据集成接口的时间成本以及接口的执行效率. 在之前的Dynamics CRM 版本号中 ...