跨系统的文件传输(上传)接口

在系统开发中经常遇见在不同的系统(如安卓和web端)的文件上传,有两种方法。
第一种:如果图片比较小可以采用post方式将图片转成base64的码放在data域中,以字符串传参的方式发送到指定的接口取出其值(多个就采用数组)。这种一般试用与仅仅图片上传,且图片比较小大约10kbz左右太大了base64位比较都,http传输数据太大,导致不能进入指定接口。
第二种:采用流传输的方式传接口,这种可以批量传输且,大小无限制,支持多种类型文件上传。下面主要讲第二种。
客服端代码

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 static void main (String[] args){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);}

服务端代码

public String fileInteraction(HttpServletRequest request, HttpServletResponse response) throws Exception {//操作成功则返回OKString 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;}

注意:写服务器端时可能会报错

RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest

修改方法将

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;

修改成

MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);

感谢大佬的博客!

java文件传输接口相关推荐

  1. java 文件传输 多客户端 传输多文件_java 文件传输 多客户端 传输多文件

    java 文件传输 多客户端 传输多文件 [2021-01-30 10:02:05]  简介: 服务器 一.进程与线程 二.vsftp服务器 1.文件传输协议(file transfer protoc ...

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

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

  3. java文件传输连接方式_Java 学习笔记 网络编程 使用Socket传输文件 CS模式

    Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...

  4. Java—文件传输助手单机版,你值得拥有

    ** 这位博主写的很好,非常强,我觉得有必要支持一下! ** 附上链接:我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去<[Java]文件传输助手(单机版)>, 一起来围观 ...

  5. java文件传输(JAVA文件传输的好处)

    JAVA 传输文件 //以前写的一个文件传输的小程序,有客户端和服务器端两部分,服务器可//以一直运行,客户端传输完一个后退出,当然你也可以根据你的需要改. //服务器端可以支持多个客户端同时上传,用 ...

  6. Java 文件传输小工具,网络传输文件,内网传输

    文件传输小工具,网络传输文件,内网传输 换了一台电脑,想把一台电脑的资料放到另一太电脑上,由于没有太大的U盘就动手用Java写了个小工具.有需要的朋友下载使用! 运行环境 运行环境需要安装JDK,并配 ...

  7. JAVA文件传输免费LW+源代码

    2.2开发工具 整个系统的开发和运行所需的软件环境包括. (1) 服务器操作系统:Windows/Unix (2) 客户端操作系统:Windows 2000/XP/Unix (3) 系统框架结构:J2 ...

  8. netty传输html页面,java 文件传输(netty) 实例源码

    服务器端: package com.rrkd.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Ch ...

  9. gtp java 文件传输_5_1_图片上传

    图片上传 一 需求 1 图片上传到本地: 2 图片上传到七牛云. 效果图: 二 具体代码实现 1 ToutiaoUtil.java: 用来判断上传的文件名是否合格: packagecom.nowcod ...

  10. 银联文件传输接口,对账文件字段含义

    仅供参考使用:

最新文章

  1. C#时间格式化(Datetime)用法详解
  2. 基于用户的协同过滤和皮尔逊相关系数
  3. 【EventBus】EventBus 事件总线框架简介 ( EventBus 使用流程 )
  4. 【ros】2.ros的xx.msg编译
  5. Bugly符号化iOS 崩溃,快速定位crash(上传符号表)
  6. java转换为c#_C#vs Java哪一个更快? 将25k C#转换为Java(2)
  7. css盒模型中margin很牛逼
  8. 前端学习之touch.js与swiper学习
  9. python网络爬虫与信息提取北京理工大学ppt_北京理工大学Python网络爬虫与信息抽取学习笔记10,信息提取...
  10. OpenGL学习一:OpenGL简介
  11. Farrago for Mac(强大的现场多音频播放工具)
  12. 群晖服务器怎么做文件转移,群晖(黑) 篇五:群晖系统迁移:旧群晖数据和系统转移到新机器...
  13. 已知尺寸计算像素公式
  14. 通达信板块监控指标_通达信主力监控系统指标公式
  15. 公开下载 |《2021技术人的百宝黑皮书》来了!
  16. ruby on rails 分页gem kaminari,指定页码跳转
  17. 自强不息,厚德载物——2021年年度总结
  18. 美丽的数据 :数据可视化与信息可视化浅谈
  19. java html5转pdf文件_Java 将Html转为PDF
  20. 2006年星座运势 天蝎座

热门文章

  1. 网卡MAC地址查询厂商
  2. 模糊综合评价模型 ——第三部分,一级模糊综合评价模型应用:例题1,对员工进行年终综合评定
  3. matlab颜色识别提取,matlab实现图像颜色特征提取
  4. keil5破解失败【经验分享】
  5. 【蓝桥杯真题】2021年蓝桥杯省赛B组题目解析+代码(C/C++)
  6. 甘特图怎么做项目进度计划
  7. 1024 科学计数法(C语言)测试点4详解
  8. linux用vi查找字符串替换,Linux中vi进行字符替换
  9. 如何用一般方式获取C币可用分
  10. PLSQL 1207 64位 配置