网站首页 > java教程 正文
在J2EE开发中,使用浏览器上传文件很简单,服务器用Apache的Commons FileUpload实现就可以了。但是在开发C/S架构的程序时就需要自己处理。用代码实现文件上传需要对表单的multipart/form-data有所了解。
表单默认情况下使用 application/x-www-form-urlencoded ,在multipart/form-data中Content-Type是这样的:
Content-Type: multipart/form-data; boundary=--******
boundary是表示分隔,用于分隔多个文件。格式是 -- 后面可以跟随一串随机数。
我自己写了一个Servlet,使用jsp表单提交,打印出request中的流,用于分析格式。
JSP源码:
后台接收:
输出打印:
分析
- 如果提交的内容是文件,那么格式如下
------WebKitFormBoundaryxHKqg3ljAsuAFWBO
Content-Disposition: form-data; name="upfile"; filename="test.png"
Content-Type: image/png
(二进制内容省略...)
------WebKitFormBoundaryxHKqg3ljAsuAFWBO
其中Content-Type是文件类型,这个是浏览器自己判断的。
- 如果提交的内容是表单字段,那么格式如下
------WebKitFormBoundaryxHKqg3ljAsuAFWBO
Content-Disposition: form-data; name="note"
字段内容
------WebKitFormBoundaryxHKqg3ljAsuAFWBO
所有文件或字段的分隔用
------WebKitFormBoundaryxHKqg3ljAsuAFWBO
当执行到未尾,最后一个分隔要加上"–-"
------WebKitFormBoundaryxHKqg3ljAsuAFWBO--
当时自己实现时忽略掉这个--,导致代码一直报错:org.apache.commons.fileupload.FileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
分析完multipart/form-data的格式后,自己写代码就比较容易了。
- 客户端发送
- 服务端接收
源码下载:s3.engr-z.com/wp/2021/uploadfile.zip
该工具类可以用于JAVA或Android。
本文原是2016年写的,更换域名和博客后旧文章未迁移过来。考虑到还有一定参考价值,特别整合收录到本站。
旧链接:https://wangzhengzhen.com/523.html
除非注明,否则均为"攻城狮·正"原创文章,请注明出处。
本文链接:https://engr-z.com/408.html
猜你喜欢
- 2024-12-19 大文件上传服务器:支持超大文件HTTP断点续传的实现办法
- 2024-12-19 Java网络编程 JAVA网络编程案例教程
- 2024-12-19 JDK11的新特性:新的HTTP API jdk11的新特性有哪些
- 2024-12-19 适用于Spring Boot的轻量级 HTTP 客户端框架
- 2024-12-19 不要忽视了它:HTTP 必知必会的那些知识
- 2024-12-19 HttpClient封装,对外提供简化的HTTP请求
- 2024-12-19 Python爬虫常用的三大库(Request的介绍)
- 2024-12-19 面试官:说说 WebSocket 和 Socket 及Http的区别?
- 2024-12-19 学Web,怎么都应该知道点HTTP方面知识啦
- 2024-12-19 Java 发送邮件 java 发送邮件附件名错误
你 发表评论:
欢迎- 04-27微服务部署架构设计详解(图文全面总结)
- 04-27Java微服务架构选型与对比:一场技术流派的巅峰对决
- 04-27微服务架构下Java的最佳实践
- 04-27Java微服务架构选型:优雅拆分与高效整合
- 04-27微服务架构下的Java代码拆分策略:像拼图一样构建系统
- 04-27微服务架构下的Java最佳实践
- 04-27微服务架构下Java的挑战与机遇
- 04-27微服务架构下Java事务管理的艺术
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)