文件上传和下载的基础知识

上传用户:
上传文件1:
上传文件2:

上传文件的表单注意项:
①请求方式必须是post
②使用file的表单域
③使用multipart/form-data的请求编码方式

1.什么是multipart/form-data?
首先我们需要明白在html中的enctype属性,
enctype:规定了form表单在发送到服务器时候编码方式。他有如下的三个值。
①application/x-www-form-urlencoded。默认的编码方式。但是在用文本的传输,大型文件的时候,使用这种编码就显得 效率低下。
②multipart/form-data 。 指定传输数据为二进制类型,比如图片、mp3、文件。
③text/plain。纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。

2.明确在enctype参数为application/x-www-form-urlencoded的时候post和get请求参数和请求体是什么形式的
get请求请求头:
GET/www.xxx.com?name=%22hello+world%22&file=temp.png&submit=submit HTTP/1.1
因为get请求没有请求体,所有他的所有参数都是在url的后边添加。type=file的表单项只能获取到文件的名字,并不能获取文件的内容。
post请求请求头:
POST /www.baidu.com HTTP/1.1
请求体:
name=%22hello+world%22&file=temp.png&submit=submit
(1)我们可以发现不管是post请求和get请求,他们的参数存在的形式都是不变的,通过key=value的形式存在。
(2)表单项type=file只能获取获取文件的名字不能获取文件的内容。

  1. 明确在enctype参数为multipart/form-data的时候post和get请求参数和请求体是什么形式的
    GET/www.xxx.com?name=%22hello+world%22&file=temp.png&submit=submit HTTP/1.1
    get请求和multipart/form-data结合无效,因为文件上传需要请求体。

post请求请求头:
POST /www.xxx.com HTTP/1.1
请求体:在火狐上看看请求体!
通过观察发现这个的请求体就发生了变化。这种请求体被称之为多部件请求体。
什么是多部件请求体:就是把每一个表单项分割为一个部件。
因为表单项分为普通表单项和文件表单项,所以说部件也有区别。
普通表单项:
一个请求头:Content-Disposition: form-data; name=”name”
一个请求体:里面就是我们表单的值”hello world”
文件表单项两个请求头:
Content-Disposition: form-data; name=“file”; filename=“temp.png”
Content-Type: image/png
一个请求体:

在multipart/form-data的post请求下serlvet里取一下参数值!

总结:参数获取不到主要是因为在使用multipart/form-data属性之后请求体发生了变化。不是key=value的形式出现所以说获取不到。

解决办法:
(1)我们可以通过js代码来些修改,把我们的参数追加在url的后边。

<form id="upload" name="upload" action="fileftp.jsp" method="post" ENCTYPE="multipart/form-data">
<input type="hidden" name="otherName" id="otherName" value="abcdefg"/>
<td nowrap>
<input type="file" id="file1" name="file1" value="" size="40" class="sbttn"/>
<input type="submit" value="上传" class="sbttn"/>
</td>
</form>
<script language="javascript">
function formSubmit(){
var action="fileftp.jsp";
action+="?otherName="+document.upload.otherName.value;
document.upload.action=action;
document.upload.submit();
}
</script>

转载地址

猜你喜欢

转载自blog.csdn.net/footprint01/article/details/82812057
今日推荐