网站首页 > 技术文章 正文
在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-11-08 加班用了2天,结果同事30分钟就搞定了?你和别人的差距在哪里
- 2024-11-08 下载文件工具类 文件下载工具是什么
- 2024-11-08 SMTP发送邮件 smtp发送邮件过程
- 2024-11-08 NPM 使用介绍 npm .staging
- 2024-11-08 java servlet笔记:设置编码集、文件下载和两种服务器跳转
- 2024-11-08 还不懂 HTTP 协议的吗?一篇文章讲透
- 2024-11-08 JavaScript包管理工具pnpm介绍 js importpackage
- 2024-11-08 Ajax请求时,请求类型,常用的几种 Content-Type json form-data xml
- 2024-11-08 Python教程:报表和日志精讲 python自动生成日报
- 2024-11-08 安全RCE之未授权访问分析 未授权的访问路径
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-