文件的上传
大体思路:
①设置编码格式:request、response
②从jsp中获取元素(getParts)
③判断这个元素是普通表单元素还是文件(利用方法:part.getSubmittedFileName()为null就是普通表单元素,否则为文件)
④如果是文件则有四个注意点
- 文件是否为空
- 文件的路径问题
- 上传文件的类型问题
- 文件的覆盖问题
- 文件目录过多的问题
⑤保存文件(part.write(basePath + File.separator + newFilename)😉
⑥清除缓存(part .delete());
具体见下面的代码`
@WebServlet(name = "UploadServlet", urlPatterns = "/upload")
@MultipartConfig(maxFileSize = 1024*1024*5,maxRequestSize = 1024*1024*20)
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//防止乱码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取数据
Collection<Part> parts = request.getParts();
String basePath = request.getServletContext().getRealPath("WEB-INF" + File.separator + "upload");
File dir = new File(basePath);
if (!dir.exists()){
dir.mkdirs();
}
PrintWriter out = response.getWriter();
//允许上传的文件的集合
List<String> list = new ArrayList<>();
list.add("txt");
list.add("png");
if (!dir.exists()){
dir.mkdirs();
}
for (Part part : parts) {
String submittedFileName = part.getSubmittedFileName();
if (submittedFileName== null){
//普通表单元素
String name = part.getName();
String parameter = request.getParameter(name);
System.out.println(name + "--" + parameter);
}else{
//问题5:如果没有选择文件:
if (submittedFileName.equals("")){
continue;
}
//问题1:IE浏览器的问题
//文件上传的时候会默认在头里面加一个content-disposition
String dis = part.getHeader("content-disposition");
dis = dis.substring(dis.indexOf("filename=") + 10<