java 模拟http文件上传,HttpURLConnection上传多文件
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上传多文件相关推荐
- java url 上传文件_Java使用HttpURLConnection上传文件(转)
从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求.但是 ...
- java http 下载文件_JAVA通过HttpURLConnection 上传和下载文件的方法
本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下: HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传 ...
- java模拟手机浏览web_在PC上测试移动端网站和模拟手机浏览器的5大方法
查了很多资料,尝试了大部分方法,下面将这一天的努力总结下分享给大家,也让大家免去看那么多文章,以下介绍的方法,都是本人亲自测试成功的方法,测试环境winxp. 一.Chrome*浏览器 chrome模 ...
- java http 上传_Java使用HttpURLConnection上传文件
从普通Web页面上传文件非常easy.仅仅须要在form标签叫上enctype="multipart/form-data"就可以,剩余工作便都交给浏览器去完毕数据收集并发送Http ...
- java IO流基础 万字详解(从拷贝文件到模拟上传头像)
目录 一.前言: 二.IO流简介: 1.什么是IO流? 2.IO流能干什么? 3.IO流的分类: 4.IO流体系: 三.字符流读写文件: 1.普通字符流读取文件: 前言: ①以单个字符读取: 代码演示 ...
- java 图片分段上传_java实现分段读取文件并通过HTTP上传的方法
本文实例讲述了java实现分段读取文件并通过HTTP上传的方法.分享给大家供大家参考.具体如下: 1.首先将文件分段,用RandomAccessFile 2.分段后将分出的内容上传到http URL ...
- 字节流读写文件案例——模拟文件(头像)上传功能
字节流读写文件案例--模拟文件(头像)上传功能 需求:使用控制台输出模拟实际开发中上传用户头像的功能 需要定义单个方法 1.在控制台录入用户头像的路径 2.解析路径字符串中文件名是否合法:后缀名为:. ...
- java上传ftp数据丢失_Java:将文件上传到FTP问题(数据包丢失) - java
我正在尝试将文件从Java应用程序传输到FTP服务器 该程序可以正常工作,文件已传输,但是当我在FTO文件夹中打开文件时,文件已损坏,我认为在文件传输过程中数据包丢失了.为什么?我该如何解决? 另一个 ...
- 【FTP】java FTPClient 文件上传内容为空,文件大小为0
问题:如题所述,使用FTPClient上传至FTP服务器, 表现如下:①文件大小为0 ②上传很小的文件,但是要花费很长的时间,20K要花费2分钟甚至更久 ③没有任何的报错,没有任何的乱码 解决方法: ...
- java 文件保存目录结构_java web 实现文件夹上传(保留目录结构)
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 Save 改进后的代码不需要for ...
最新文章
- 软件工程系列教材:软件架构设计实践教程
- 完全二叉树最小深度_树与二叉树递归c++
- 终于知道什么情况下需要实现.NET Core中的IOptions接口
- java面试题43要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )
- 多线程锁,线程池,消费者生产者模型
- java 异常 最好在action捕获还是service_到底应该在action里面捕捉异常还是在service里面捕捉异常?...
- Oracle客户端的卸载
- Spring的事务管理难点剖析(5):联合军种作战的混乱
- 精确的力量:完美SNES仿真器的一个3GHz追求
- Linux常用命令介绍(二)——压缩与解压缩命令
- Java第二节课总结
- 对网页渲染的初步认识
- 【java基础】Eclipse Java注释模板设置详解以及版权声明
- 使用Bigemap下载地图生成GST(Mapinfo格式)地图包
- java实现获取中国大学名称列表、即所在省份
- Matlab中绘制折线图(附matlab代码)
- 独立安装 lamp 兄弟连
- Unity报错之【发布UWP显示“Could not find any supported UWP SDK installations”】
- java.util.Date转化为java.sql.Date出现时间错误
- vue3 + vant 全局的loading效果制作,写的挺好的留个底
热门文章
- hibernate.hbm.xml详解
- python pip安装指定版本unittest_你们想要的unittest用例失败重运行,解决方案来啦!...
- 苹果手机夜间模式怎么设置_微信夜间模式终于来了,苹果和安卓都适用!
- 脑子笨的人可以学计算机吗,脑子笨的人有什么特征 反应慢的人其实很聪明
- centos安装python3小白_在Linux CentOS7 下安装 python3
- rsviwe32 7.6 授权_「复杂系统迁移 .NET Core平台系列」之认证和授权
- linux的fork语句,Linux C/C++——fork()函数基础
- mysql为什么要编译安装_Mysql编译安装
- python建立字典读取键和值_在Python字典中动态创建键和值
- 五十九、Vue中的样式绑定