import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import com.cmhit.commons.util.PU_FixAttrGet;
import com.elkan.utils.SynchronizationFile;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.FileRenamePolicy;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = -3096800116651263134L;
private String fileSizeLimit;
private File oldFile;
public void init(ServletConfig config) throws ServletException {
this.fileSizeLimit = config.getInitParameter("fileSizeLimit");
}
public void destroy() {
this.fileSizeLimit = null;
super.destroy();
}
class MyFileRenamePolicy implements FileRenamePolicy {
public File rename(File file) {
oldFile = file;
String fileSaveName = StringUtils.join(new String[] { java.util.UUID.randomUUID().toString(), ".",
FilenameUtils.getExtension(file.getName()) });
File result = new File(file.getParentFile(), fileSaveName);
// File result = new File(file.getParentFile(), oldFile.getName());
return result;
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String uploadPath = request.getSession().getServletContext()
.getRealPath("/");
//文件保存位置,当前项目下的upload/mail
// String uploadDir = "uploadAttach" + File.separatorChar;
String uploadDir = "/uploadAttach/";
//每天上传的文件根据日期存放在不同的文件夹
// String autoCreatedDateDirByParttern = "yyyy" + File.separatorChar + "MM" + File.separatorChar + "dd" + File.separatorChar;
String autoCreatedDateDirByParttern = "yyyy/MM/dd/";
String autoCreatedDateDir = DateFormatUtils.format(new java.util.Date(), autoCreatedDateDirByParttern);
String ctxDir = session.getServletContext().getRealPath(String.valueOf(File.separatorChar));
if (!ctxDir.endsWith(String.valueOf(File.separatorChar))) {
ctxDir = ctxDir + File.separatorChar;
}
File savePath = new File(ctxDir + uploadDir + autoCreatedDateDir);
if (!savePath.exists()) {
savePath.mkdirs();
}
String saveDirectory = ctxDir + uploadDir + autoCreatedDateDir;
if (StringUtils.isBlank(this.fileSizeLimit.toString())) {
this.fileSizeLimit = "80";// 默认100M
}
int maxPostSize = Integer.parseInt(this.fileSizeLimit) * 1024 * 1024;
String encoding = "UTF-8";
FileRenamePolicy rename = new MyFileRenamePolicy();
MultipartRequest multi = null;
try {
multi = new MultipartRequest(request, saveDirectory, maxPostSize, encoding, rename);
} catch (IOException e) {
e.printStackTrace();
return;
}
// 输出
Enumeration files = multi.getFileNames();
while (files.hasMoreElements()) {
String name = (String) files.nextElement();
File f = multi.getFile(name);
if (f != null) {
String fileName = multi.getFilesystemName(name);
String fileSavePath = uploadDir + autoCreatedDateDir + fileName;
System.out.println("文件名:" + oldFile.getName());
System.out.println("保存路径:" + fileSavePath);
response.getWriter().print(fileSavePath);
// File uploadedFile = new File(uploadPath + fileSavePath);
// PU_FixAttrGet pf = new PU_FixAttrGet();
// String iPath = pf.getValue("iPath", "MPS");//http://192.168.78.206/ReciveFile
// SynchronizationFile s_file = new SynchronizationFile(uploadedFile.getAbsolutePath(),fileSavePath,iPath);
// int code = s_file.uploadFile();
// System.out.println(code);
}
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
public String getFileSizeLimit() {
return fileSizeLimit;
}
public void setFileSizeLimit(String fileSizeLimit) {
this.fileSizeLimit = fileSizeLimit;
}
}