###前端代码
<%--这里提交方式必须的post传输的数据量大,且enctype必须得下述:表单包含文件上传控件时必须使用--%>
<form id="myfile" action="/uploadVideoServlet" method="post" enctype="multipart/form-data" class="f">
<table class="table table-hover" align="center">
<tr>
<td>上传者</td>
<input id="uploader" name="uploader" type="hidden" value="${admin.adminname}">
<td><input type="text" value="${admin.adminname}" disabled="disabled" class="name"/></td>
</tr>
<tr>
<td>类型</td>
<td>
<input type="radio" name="type" value="1">弓弦乐器
<input type="radio" name="type" value="2">铜管乐器
<input type="radio" name="type" value="3">木管乐器
<input type="radio" name="type" value="4">弹拨乐器
<input type="radio" name="type" value="5">键盘乐器
<input type="radio" name="type" value="6">打击乐器
</td>
</tr>
<tr>
<td>上传文件</td>
<td><input type="file" name="myfile" class="show"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" onclick="myupload()" value="点击上传" class="btn-info"/></td>
</tr>
</table>
###Servlet内
//1、上传者
String uploader = request.getParameter("uploader");
//2、视频相关的乐器类型
String type = request.getParameter("type");
通过这种方法获取的两个参数值均为空,通过查询资料得知,在使用enctype="multipart/form-data"后请求的请求体信息已经改变,不能直接通过getParameter是获取不到的.
先来看enctype属性:
enctype:规定了form表单在发送到服务器时候编码方式,它有如下的三个值。
①application/x-www-form-urlencoded:默认的编码方式。但是在用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。
②multipart/form-data:指定传输数据为二进制类型,比如图片、mp3、文件。
③text/plain:纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。
解决方法:
@MultipartConfig
//加上这个注解,反射该Servlet时才知道处理的是文件上传,同时解决了在multipart/form-data 文件上传表单中传递参数无法获取的问题!
public class UploadVideoServlet extends HttpServlet{
...
}