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

客户端请求:

  1. public String upLoadFilePost(String actionUrl, Map<String, File> files) throws IOException {
  2. String BOUNDARY = java.util.UUID.randomUUID().toString();
  3. String PREFIX = "--", LINEND = "\r\n";
  4. String MULTIPART_FROM_DATA = "multipart/form-data";
  5. String CHARSET = "UTF-8";
  6. URL uri = new URL(actionUrl);
  7. HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
  8. conn.setReadTimeout(5 * 1000);
  9. conn.setDoInput(true);// 允许输入
  10. conn.setDoOutput(true);// 允许输出
  11. conn.setUseCaches(false);
  12. conn.setRequestMethod("POST"); // Post方式
  13. conn.setRequestProperty("connection", "keep-alive");
  14. conn.setRequestProperty("Charsert", "UTF-8");
  15. conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
  16. + ";boundary=" + BOUNDARY);
  17.  
  18. DataOutputStream outStream = new DataOutputStream(
  19. conn.getOutputStream());
  20. // 发送文件数据
  21. if (files != null)
  22. for (Map.Entry<String, File> file : files.entrySet()) {
  23. StringBuilder sb1 = new StringBuilder();
  24. sb1.append(PREFIX);
  25. sb1.append(BOUNDARY);
  26. sb1.append(LINEND);
  27. sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""
  28. + file.getKey() + "\"" + LINEND);
  29. sb1.append("Content-Type: application/octet-stream; charset="
  30. + CHARSET + LINEND);
  31. sb1.append(LINEND);
  32. outStream.write(sb1.toString().getBytes());
  33. InputStream is = new FileInputStream(file.getValue());
  34. byte[] buffer = new byte[1024];
  35. int len = 0;
  36. while ((len = is.read(buffer)) != -1) {
  37. outStream.write(buffer, 0, len);
  38. }
  39.  
  40. is.close();
  41. outStream.write(LINEND.getBytes());
  42. }
  43.  
  44. // 请求结束标志
  45. byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
  46. outStream.write(end_data);
  47. outStream.flush();
  48.  
  49. // 得到响应码
  50. int res = conn.getResponseCode();
  51. if (res == 200) {
  52. InputStream in = conn.getInputStream();
  53. InputStreamReader isReader = new InputStreamReader(in);
  54. BufferedReader bufReader = new BufferedReader(isReader);
  55. String line = "";
  56. String data = "";
  57. while ((line = bufReader.readLine()) != null) {
  58. data += line;
  59. }
  60. outStream.close();
  61. conn.disconnect();
  62. return data;
  63. }
  64. outStream.close();
  65. conn.disconnect();
  66. return null;
  67. }

服务端接收接口方法体:

  1. public String fileInteraction(HttpServletRequest request, HttpServletResponse response) throws Exception {
  2. //操作成功则返回OK
  3. String result = "";
  4. MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
  5. //解析request,将结果放置在list中
  6. Map<String, List<MultipartFile>> fileMap = multiRequest.getMultiFileMap();
  7. for (String key : fileMap.keySet()) {
  8. List<MultipartFile> files = fileMap.get(key);
  9. for (MultipartFile file : files) {
  10. if (!file.isEmpty()) {
  11. String fileNamePath = file.getOriginalFilename();
  12. String[] params = fileNamePath.split("\\.");
  13. String filename = "";
  14. int i = 0;
  15. for (String str : params) {
  16. i = i + 1;
  17. if (StringUtils.isNotEmpty(filename)) {
  18. if (i==params.length) {
  19. filename = filename + "." + str;
  20. }else{
  21. filename = filename + "/" + str;
  22. }
  23. }else{
  24. filename = str;
  25. }
  26. }
  27. // 文件保存路径
  28. String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/wxfile/" + filename;
  29. File iFile = new File(filePath);
  30. File iFileParent = iFile.getParentFile();
  31. if(!iFileParent.exists()){
  32. iFileParent.mkdirs();
  33. }
  34. // 转存文件
  35. file.transferTo(new File(filePath));
  36. result = "ok";
  37. }
  38. }
  39. }
  40. return result;
  41. }

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

  1.      String actionUrl = "http://shuilangyizu.iask.in/liuf/utilController/fileInteraction.do";
  2. Map<String, File> files = new HashMap<String, File>();
  3. File file = new File(request.getSession().getServletContext().getRealPath("/") + "upload/temp/1.doc");
  4. files.put("x."+file.getName(), file);
  5. File file2 = new File(request.getSession().getServletContext().getRealPath("/") + "upload/temp/1.jpg");
  6. files.put("y."+file2.getName(), file2);
  7. 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. javascript数组去重复

    数组去重 知乎上看到有人去腾讯面试,然后发了面试的js题目,有一个是数组去重 我的土办法 var arr = ['a', 'g', 'q', 'd', 'a', 'e', 'q']; console. ...

  2. CentOS7系统64位下搭建Python3.6环境及相关细节工具部署文章收集

    (1)http://blog.csdn.net/chen798213337/article/details/70767902 问题描述: 安装Navicat管理数据库时,启动界面出现乱码情况. 解决办 ...

  3. Bootstrap定制开发

    Bootstrap作为目前很受欢迎的前端框架,越来越多的网站开始使用基于Bootstrap框架进行开发. 1.定制开发方法 (1)Bootstrap定制开发可以使用LESS和Grunt实现定制化 (2 ...

  4. H5移动端JS操作LocalStorage方法

    LocalStorage和SessionStorage LocalStorage 是对Cookie的优化 没有时间限制的数据存储 在隐私模式下不可读取 大小限制在500万字符左右,各个浏览器不一致 在 ...

  5. C#/Asp.Net 获取各种Url的方法

    比如有:http://localhost:60527/WebSite1test/Default2.aspx?QueryString1=1&QueryString2=2 Response.Wri ...

  6. cocos2d-js 3.0 rc2 自定义UI控件组件 例子:能播放动画的MenuItem。MenuItemSprite的bug

    其实总体自定义UI组件都比较简单,尤其是cocos2d-js是开源的,如果有什么不明白的直接看js代码或者C++代码即可.当然js代码基本就够了. 另外,js的ctor函数虽然说是构造函数,但毕竟不是 ...

  7. Java的静态成员类

    Java的静态成员类: 1.静态成员类是最简单的嵌套类.最好把它看成一个普通的类,只是碰巧被声明在另一个类的内部而已,它可以访问外围类的所以成员,包括那些声明为私有的成员. 2.静态成员类是外围类的一 ...

  8. Xamarin.Android之定位

    一.前言 打开我们手中的应用,可以发现越来越多的应用使用了定位,从而使我们的生活更加方便,所以本章我们将学习如何在Xamarin中进行定位的开发. 二.准备工作 因为我们的虚拟机是运行在电脑本地的,自 ...

  9. 整合ssm框架之配置文件

    原文:https://blog.csdn.net/zwyanqing/article/details/53039591 ssm整合 一.applicationContext.xml 1.配置数据源 & ...

  10. Photoshop CS6 操作记录

    全局快捷键 橡皮 E 画笔 B 魔棒工具 W 钢笔工具 P 选区工具 M 移动画布 按住Space后鼠标拖动 放大缩小画布 Ctrl+-, Ctrl++ 调出/收回标尺 Ctrl+R 调整画笔大小 [ ...