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. 软件工程系列教材:软件架构设计实践教程
  2. 完全二叉树最小深度_树与二叉树递归c++
  3. 终于知道什么情况下需要实现.NET Core中的IOptions接口
  4. java面试题43要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )
  5. 多线程锁,线程池,消费者生产者模型
  6. java 异常 最好在action捕获还是service_到底应该在action里面捕捉异常还是在service里面捕捉异常?...
  7. Oracle客户端的卸载
  8. Spring的事务管理难点剖析(5):联合军种作战的混乱
  9. 精确的力量:完美SNES仿真器的一个3GHz追求
  10. Linux常用命令介绍(二)——压缩与解压缩命令
  11. Java第二节课总结
  12. 对网页渲染的初步认识
  13. 【java基础】Eclipse Java注释模板设置详解以及版权声明
  14. 使用Bigemap下载地图生成GST(Mapinfo格式)地图包
  15. java实现获取中国大学名称列表、即所在省份
  16. Matlab中绘制折线图(附matlab代码)
  17. 独立安装 lamp 兄弟连
  18. Unity报错之【发布UWP显示“Could not find any supported UWP SDK installations”】
  19. java.util.Date转化为java.sql.Date出现时间错误
  20. vue3 + vant 全局的loading效果制作,写的挺好的留个底

热门文章

  1. hibernate.hbm.xml详解
  2. python pip安装指定版本unittest_你们想要的unittest用例失败重运行,解决方案来啦!...
  3. 苹果手机夜间模式怎么设置_微信夜间模式终于来了,苹果和安卓都适用!
  4. 脑子笨的人可以学计算机吗,脑子笨的人有什么特征 反应慢的人其实很聪明
  5. centos安装python3小白_在Linux CentOS7 下安装 python3
  6. rsviwe32 7.6 授权_「复杂系统迁移 .NET Core平台系列」之认证和授权
  7. linux的fork语句,Linux C/C++——fork()函数基础
  8. mysql为什么要编译安装_Mysql编译安装
  9. python建立字典读取键和值_在Python字典中动态创建键和值
  10. 五十九、Vue中的样式绑定