依然是没有进行封装处理和验证处理
JSP页面代码
<form action="moreFile" method="post" enctype="multipart/form-data">
<input type="file" name="photo1">
<input type="file" name="photo2">
<input type="file" name="photo3">
<button>上传</button>
</form>
Servlet代码
package com.shxt.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Date;
import java.util.Random;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
/**
* Servlet implementation class UploadServlet
*/
@WebServlet("/moreFile")
@MultipartConfig(
fileSizeThreshold=1024*1024*2, // 2MB 当数据量大于该值时,内容将被写入文件
maxFileSize=1024*1024*10, // 10MB 允许上传的文件最大值。默认值为 -1,表示没有限制
maxRequestSize=1024*1024*50 // 50MB 针对该 multipart/form-data 请求的最大数量,默认值为 -1,表示没有限制
)
public class UploadMoreServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取服务器的绝对路径
String path = request.getServletContext().getRealPath("/upload");
//2.建立文件联系
File folder = new File(path);
//3.判断该文件夹是否存在
if(!folder.exists()/*文件是否存在*/&&!folder.isDirectory()/*是否是文件夹*/){
folder.mkdirs();//创建
}
//4.获取文件的集合 - 想想集合的继承的结构图
Collection<Part> parts =request.getParts();
if(parts.size()==1){//单文件上传
//Servlet3.0将multipart/form-data的POST请求封装成Part,通过Part对上传的文件进行操作。
//A.获取Part文件对象
Part part = request.getPart("photo");//获取上传的文件 <input type="file" name="photo">
//B.获取文件名称:
//Servlet3.0 没有提供直接获取文件的名称 , 所以需要读取头部信息获取文件名 - Tomcat 7
//Servlet 3.1 增加了新的方法 Part.getSubmittedFileName,用于取得客户端上传的文件名。 - Tomcat 8
String clientFileName = extractFileName(part);
if(!clientFileName.isEmpty()){
//C.获取客户端的后缀名称
String ext = clientFileName.substring(clientFileName.lastIndexOf(".")+1);
//D.创建上传文件的名称[新文件名称]
//方式一:
String uploadNewFileName = (new Date()).getTime()+"_"+(new Random()).nextInt(1000)+"."+ext;
//E.上传文件
part.write(path+File.separator+uploadNewFileName);
}
}else{//多文件上传
//一次性上传多个文件
for (Part part : parts) {//循环处理上传的文件
//A.获取文件名称:
String clientFileName = extractFileName(part);
if(!clientFileName.isEmpty()){
//B.获取客户端的后缀名称
String ext = clientFileName.substring(clientFileName.lastIndexOf(".")+1);
//C.创建上传文件的名称[新文件名称]
String uploadNewFileName = UUID.randomUUID().toString()+"."+ext;
//D.上传文件
part.write(path+File.separator+uploadNewFileName);
}
}
}
}
/**
* 从 HTTP header content-disposition中获得文件名
* content-disposition中内容:form-data; name="dataFile"; filename="PHOTO.JPG"
*/
private String extractFileName(Part part) {
String contentDisp = part.getHeader("content-disposition");
String[] items = contentDisp.split(";");
for (String s : items) {
if (s.trim().startsWith("filename")) {
return s.substring(s.indexOf("=") + 2, s.length()-1);
}
}
return "";
}
}
网友评论