public static String sendFile(final String url, byte[] file, String filename) throws Exception{final String boundary = "===" + Long.toHexString(System.currentTimeMillis()) + "===";//分割线final String CRLF = "\r\n";HttpURLConnection httpConn = null;try {httpConn = (HttpURLConnection) new URL(url).openConnection();httpConn.setConnectTimeout(5 * 1000);httpConn.setRequestProperty("Connection", "close");httpConn.setDoOutput(true);httpConn.setDoInput(true);httpConn.setUseCaches(false);httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);httpConn.connect();try (OutputStream output = httpConn.getOutputStream();PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true)) {writer.append("--" + boundary).append(CRLF).append("Content-Disposition: form-data; name=file; filename=" + filename).append(CRLF).append(new StringBuilder("Content-Type:").append( URLConnection.guessContentTypeFromName(filename) ).append("; charset=UTF-8")).append(CRLF).append("Content-Transfer-Encoding: binary").append(CRLF).append(CRLF).flush();output.write(file);output.flush();writer.append(CRLF).flush();writer.append("--" + boundary + "--").append(CRLF).flush();//http1.1是半双工模式,必须写完成之后再拿服务端的inputStreamtry (InputStream inputStream = httpConn.getInputStream()){byte[] resByte = new byte[ inputStream.available() ];inputStream.read(resByte);String res = new String(resByte);System.out.println(res);return res;}}} finally {if (httpConn != null){httpConn.disconnect();}}}

main方法进行测试:

  public static void main(String[] args) throws Exception {FileChannel fileChannel = FileChannel.open( Paths.get("B:\\documents\\mycat.pdf") );ByteBuffer byteBuffer = ByteBuffer.allocate( (int) fileChannel.size() );fileChannel.read(byteBuffer);sendFile("http://localhost:8097/api/save", byteBuffer.array(), "mycat-pdf");}

springmvc后端接口接收:

@RequestMapping(value = "/save", method = RequestMethod.POST)public LllFile save(@RequestParam(name = "file") MultipartFile multipartFile, String filename, String usrId, String acct){try{byte[] file = multipartFile.getBytes();LllFile res = iFileService.saveFile(file, filename, usrId, acct);return res;}catch(Exception ex){log.error("", ex);}return null;}

纯servlet接收,通过request的getPart方法:

@RequestMapping(value = "/save", method = RequestMethod.POST)
public LllFile save(HttpServletRequest request) throws IOException, ServletException {Collection<Part> parts = request.getParts();for (Part part : parts) {System.out.println(part.getSize());System.out.println("文件名:" + part.getSubmittedFileName());}
return null;
}

上传多个文件:

1:首先查看浏览器是怎么区分多文件的;

-----Webkit***是chrome用来区分文件的,最后一个boundary后面多了个--。

java实现如下:

 public static String sendMultipleFile(Map<String, byte[]> fileMsgMap, final String url) throws Exception {final String boundary = "===" + Long.toHexString(System.currentTimeMillis()) + "===";//分割线final String CRLF = "\r\n";HttpURLConnection httpConn = null;try {httpConn = (HttpURLConnection) new URL(url).openConnection();httpConn.setConnectTimeout(5 * 1000);httpConn.setRequestProperty("Connection", "close");httpConn.setDoOutput(true);httpConn.setDoInput(true);httpConn.setUseCaches(false);httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);httpConn.connect();try (OutputStream output = httpConn.getOutputStream();PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true)) {for (Map.Entry<String, byte[]> entry : fileMsgMap.entrySet()) {writer.append("--" + boundary).append(CRLF).append("Content-Disposition: form-data; name=files; filename=" + entry.getKey()).append(CRLF).append(new StringBuilder("Content-Type:").append( URLConnection.guessContentTypeFromName(entry.getKey()) ).append("; charset=UTF-8")).append(CRLF).append("Content-Transfer-Encoding: binary").append(CRLF).append(CRLF).flush();output.write(entry.getValue());output.flush();writer.append(CRLF).flush();}//最后一行末尾多个--writer.append("--" + boundary + "--").append(CRLF).flush();//http1.1是半双工模式,必须写完成之后再拿服务端的inputStreamtry (InputStream inputStream = httpConn.getInputStream()){byte[] resByte = new byte[ inputStream.available() ];inputStream.read(resByte);String res = new String(resByte);System.out.println(res);return res;}}} finally {if (httpConn != null){httpConn.disconnect();}}}

springmvc接收代码:

   @PostMapping(path = "/up")@ResponseBodypublic String upFile(@RequestParam(name = "files") MultipartFile[] multipartFiles, HttpServletRequest request) throws IOException, ServletException {
//        Collection<Part> parts = request.getParts();
//        for (Part part : parts) {
//            System.out.println(part.getSize());
//            System.out.println("文件名:" + part.getSubmittedFileName());
//        }System.out.println(multipartFiles);System.out.println(multipartFiles.length);for (MultipartFile file : multipartFiles) {System.out.println("文件名是:" + file.getOriginalFilename());System.out.println("文件信息大小是:" + file.getBytes().length);}return "ok";}

上传多个文件最好修改tomcat的最大post请求大小限制,

server:tomcat:max-http-form-post-size: 40MB

或者

server:tomcat:#30Mb最大post请求体max-http-post-size: 31457280

java 模拟http文件上传,HttpURLConnection上传多文件相关推荐

  1. java url 上传文件_Java使用HttpURLConnection上传文件(转)

    从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求.但是 ...

  2. java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法

    本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下: HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传 ...

  3. java模拟手机浏览web_在PC上测试移动端网站和模拟手机浏览器的5大方法

    查了很多资料,尝试了大部分方法,下面将这一天的努力总结下分享给大家,也让大家免去看那么多文章,以下介绍的方法,都是本人亲自测试成功的方法,测试环境winxp. 一.Chrome*浏览器 chrome模 ...

  4. java http 上传_Java使用HttpURLConnection上传文件

    从普通Web页面上传文件非常easy.仅仅须要在form标签叫上enctype="multipart/form-data"就可以,剩余工作便都交给浏览器去完毕数据收集并发送Http ...

  5. java IO流基础 万字详解(从拷贝文件到模拟上传头像)

    目录 一.前言: 二.IO流简介: 1.什么是IO流? 2.IO流能干什么? 3.IO流的分类: 4.IO流体系: 三.字符流读写文件: 1.普通字符流读取文件: 前言: ①以单个字符读取: 代码演示 ...

  6. java 图片分段上传_java实现分段读取文件并通过HTTP上传的方法

    本文实例讲述了java实现分段读取文件并通过HTTP上传的方法.分享给大家供大家参考.具体如下: 1.首先将文件分段,用RandomAccessFile 2.分段后将分出的内容上传到http URL ...

  7. 字节流读写文件案例——模拟文件(头像)上传功能

    字节流读写文件案例--模拟文件(头像)上传功能 需求:使用控制台输出模拟实际开发中上传用户头像的功能 需要定义单个方法 1.在控制台录入用户头像的路径 2.解析路径字符串中文件名是否合法:后缀名为:. ...

  8. java上传ftp数据丢失_Java:将文件上传到FTP问题(数据包丢失) - java

    我正在尝试将文件从Java应用程序传输到FTP服务器 该程序可以正常工作,文件已传输,但是当我在FTO文件夹中打开文件时,文件已损坏,我认为在文件传输过程中数据包丢失了.为什么?我该如何解决? 另一个 ...

  9. 【FTP】java FTPClient 文件上传内容为空,文件大小为0

    问题:如题所述,使用FTPClient上传至FTP服务器, 表现如下:①文件大小为0 ②上传很小的文件,但是要花费很长的时间,20K要花费2分钟甚至更久 ③没有任何的报错,没有任何的乱码 解决方法: ...

  10. java 文件保存目录结构_java web 实现文件夹上传(保留目录结构)

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 Save 改进后的代码不需要for ...

最新文章

  1. php中查询结果展示
  2. 字符串与数组的常用方法
  3. 微软MSRA成立理论中心,陈卫负责马志明等四院士加盟
  4. Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)
  5. IDEA中的maven工程Java未被识别的解决方法
  6. Docker+Jenkins+Gitlab+Django应用部署实践
  7. 持续集成之 Nuget 进阶
  8. 多图上传乱序php,discuz图片顺序混乱解决方案_php技巧
  9. django-后台管理-笔记
  10. Linux不仅仅是开源
  11. 【CCS2018】SDN跨应用中毒攻击
  12. springcloud和dubbole的区别和解释
  13. vscode快捷键:多行同时输入
  14. 论文笔记--知识表示学习研究进展-2016
  15. 理解MapReduce计算构架
  16. 转载-极化码系列(1)-极化码的起源和概述
  17. Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException问题 学习记录
  18. 什么是base64?
  19. 【ABMDRNet2021】 Adaptive-weighted Bi-directional Modality Difference Reduction Network for RGB-T Sema
  20. iphone和iPad开发的区别

热门文章

  1. Java事务处理全解析(二)——失败的案例
  2. Java EE开发三剑客现状及发展浅析
  3. linux man命令的1和1p,Linux中man命令的使用方法再解释
  4. 机器人聊天软件c#_使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
  5. 计算机科学与编程基础,国外经典教材·计算机科学与技术:Oracle 10g编程基础
  6. 语音怎么进入滤波器matlab,基于Matlab的语音信号滤波器的设计与实现
  7. python实现排序算法_python实现各种排序算法
  8. 设置mysql整形_mysql 整型字段设计
  9. tf rnn layer
  10. 计算机word考试中的图文混排,2014招警考试公共基础计算机知识:Word的图文混排功能...