Servlet 与 Spring MVC上传文件
在写web项目的时候,难免会有前端向后台发送文件数据的情况,我们知道:通常我们用form表单向后端发送请求数据并得到响应(比如上传头像)。form表单中input标签有一个参数type,里面有个值是file,是不是我们只需要修改这里,就可以直接向后端发送文件数据了呢?答案是不对,我们先来看我们应该怎样写这个form表单
<form method="post" action="action.do" enctype="multipart/form-data">
<input type="file" name="upload_file">
<input type="submit" value="上传">
</form>
我们可以注意到,在form标签中,有一个:enctype=“multipart/form-data” ,这句话的作用是什么呢?
我们先来看一下enctype中的三个选项分别代表什么
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data | 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为 “+” 加号,但不对特殊字符编码。 |
其中表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码,是类上传二进制数据方式, 所以form里面的input的值以二进制的方式传过去的。
而 multipart/form-data 是组合post请求方式发送的,但其与普通的post请求有两处区别
- 1 . 请求头:multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,其值也必须为multipart/form-data&