multipart/form-data请求与文件上传
要上传文件,需要用post方法,并且设置enctype为multipart/form-data。
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="text" name="param1">
<input type="text" name="param2">
<input type="file" name="fileparam">
<button type="submit">上传</button>
</form>
关于multipart/form-data
multipart/form-data与post方法结合,用了multipart/form-data的post请求与普通的post请求的请求头和请求体都有不同。
普通post请求头中Content-Type字段值为:
Content-Type: application/x-www-form-urlencoded
multipart/form-data请求头中Content-Type字段值为multipart/form-data; boundary=xxxxxxx, (xxxxxx规定了请求体中的内容分隔符)。
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryZpsWTsOiRHI0TBW7
普通post请求的请求体格式为(不会上传文件内容):
param1=AAAA¶m2=&fileparam=test.txt
而multipart/form-data请求体格式为(包含文件内容):
------WebKitFormBoundaryjUVXJ3PslTEBh9as
Content-Disposition: form-data; name="param1" AAAA
------WebKitFormBoundaryjUVXJ3PslTEBh9as
Content-Disposition: form-data; name="param2" ------WebKitFormBoundaryjUVXJ3PslTEBh9as
Content-Disposition: form-data; name="fileparam"; filename="test.txt"
Content-Type: text/plain contents of file
------WebKitFormBoundaryjUVXJ3PslTEBh9as
后台处理
使用multipart/form-data提交的数据使用HttpServletRequest对象的getParameter()等方法无法读取。可以读取整个请求体数据流自己解析数据。但更好的方式是使用已经有的第三方工具类,如fileupload,jspsmartupload。下面的例子中使用的是fileupload。
HttpServletRequeest request=....
if(ServletFileUpload.isMultipartContent(request))
{
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
for(FileItem i: items)
{
i.getFieldName(); //参数名
//i.getString(); //参数值(返回字符串),如果是上传文件,则为文件内容
//i.get(); //参数值(返回字节数组),如果是上传文件,则为文件内容
//i.getSize(); //参数值的字节大小
//i.getName(); //上传文件的文件名
//i.getContentType(); //上传文件的内容类型
if(!i.isFormField()&&i.getSize()>0) //简单参数返回true,文件返回false
Files.write(Paths.get("/upload/"+Paths.get(i.getName()).getFileName()), i.get());
}
}
multipart/form-data请求与文件上传的更多相关文章
- Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie)
Django 10 GET和POST(HttpRequest对象,GET和POST请求,文件上传,HttpResponse对象的cookie) 一.HttpRequest对象 #HttpRequest ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
- WordPress Contact Form 7插件任意文件上传漏洞
漏洞名称: WordPress Contact Form 7插件任意文件上传漏洞 CNNVD编号: CNNVD-201311-415 发布时间: 2013-11-28 更新时间: 2013-11-28 ...
- el-upload用form的方式多文件上传的方法
使用el-upload组件遇到的坑. 1.第一种感觉最好,首先多个文件是一个http请求,另外还可以传除文件外其他的参数,但是没有进度条了. 发送请求的部分没有注释的部分是我分装了调后台的api,注释 ...
- 前端笔记之微信小程序(三)GET请求案例&文件上传和相册API&配置https
一.信息流小程序-GET请求案例 1.1服务端接口开发 一定要养成接口的意识,前端单打独斗出不来任何效果,必须有接口配合,写一个带有分页.关键词查询的接口: 分页接口:http://127.0.0.1 ...
- 测试平台系列(92) 让http请求支持文件上传
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节呢,我们编写了oss的 ...
- 使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
package org.caeit.cloud.dev.util; import java.io.File; import java.io.IOException; import java.io.Un ...
- Laravel请求/Cookies/文件上传
一.HTTP请求 1.基本示例:通过依赖注入获取当前 HTTP 请求实例,应该在控制器的构造函数或方法中对Illuminate\Http\Request 类进行类型提示,当前请求实例会被服务容器自动注 ...
- form+iframe实现ajax文件上传
在做文件上传时除了传入文件外,还有附件参数,并且要求不刷新页面,之前是表单提交的方式,现在修改成ajax上传的方式,由于没有选择用插件,所以用form+iframe的方式,并且这种方式对IE8以上及主 ...
- form表单多文件上传
1.html/jsp主页 <%@ page language="java" contentType="text/html; charset=UTF-8" ...
随机推荐
- ListView滑动删除效果实现
通过继承ListView然后结合PopupWindow实现 首先是布局文件: delete_btn.xml:这里只需要一个Button <?xml version="1.0" ...
- caffe 无GPU 环境搭建
root@k-Lenovo:/home/k# sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-d ...
- java容器---集合总结
思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...
- Android打Path的方法
转自:http://blog.csdn.net/xiangzi10/article/details/42710099 作为程序员,了解diff&patch命 令是非常必要的.比如说我们发现某个 ...
- 如何解决adb devices 端口被占用的问题zz
在win xp ,win 7 上使用adb时, 越来越多的人出现了 adb devices 命令长时间无响应.adb start-server 失败.eclipse adt初始化时卡在dbms-ini ...
- Java Hour 26 Execution
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 26 Hours. Java 虚拟机启动的时候加载一个指定的类然后调用该类中的 ...
- Android__Context
Context字面意思上下文,位于framework package的android.content.Context中, 其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过Co ...
- 二分查找法 java
前几天去面试,让我写二分查找法,真是哔了狗! 提了离职申请,没事写写吧! 首先二分查找是在一堆有序的序列中找到指定的结果. public class Erfen { public static int ...
- Ajax优缺点
1.页面无刷新,用户体验好: 2.异步通信,迅速的响应能力: 3.按需取数据,减少冗余需求,减少服务器负荷. 4.破坏浏览器后退按钮的正常行为. 5.Ajax的核心是JavaScript对象XmlHt ...
- Equipment Box[HDU1110]
Equipment Box Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...