一、要求
1、表单的提交方式为post
2、表单的enctype必须设置为multipart/form-data
3、每一个文件控件的必须有一个name属性
4、文件上传的目标一般为服务器的web-info或者服务器所在主机磁盘(非项目目录)
二、Smartupload,
文件上传时,是直接将文件加载在内存中,所以上传大文件时很容易内存溢出
三、Commons-Filupload,
是Apache开源项目,利用磁盘指定位置作为临时文件,而不是一次性加载内存中,上传完成后会清空文件,common-fileupload为推荐上传组件(strus2框架默认支持,servlet3.0作为一个模块)
非servlet3.0的项目使用时,需要导包。
四、servlet3.0方式
@WebServlet(urlPatterns = "/test/UploadServlet")
@MultipartConfig(location = "D:\\test"
// ,fileSizeThreshold = 10240,
// maxFileSize = 10240000L,
// maxRequestSize = 102400000000L
)
//设置临时文件的存储目录,内存缓存最大限制,允许上传的单个文件最大值,允许提交的表单数据总大小
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part part=request.getPart("myfile");//表单的file组件的name属性,
String fname = part.getSubmittedFileName();//获得上传文件名称
part.write("D:\\test\\"+fname);//将数据保存到指定文件中
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
//=========================
<form action="/test/UploadServlet" method="post" id="f" enctype="multipart/form-data" name="myform">
<div class="input-group">
<input type="file" name="myfile">
</div>
<button class="btn-primary">提交</button>
</form>