package anubis.upload;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
/**
* @项目名称: plupload
* @类名称: UploaderServlet
* @类描述: 上传后台处理
* @创建人: serical
* @创建时间: 2015-9-18 下午4:21:14
* @修改人: serical
* @修改时间: 2015-9-18 下午4:21:14
* @修改备注:
* @version: 1.0
*/
public class UploaderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
String repositoryPath;
String uploadPath;
/**
* 上传处理
* @方法名:doPost
* @参数:@param request
* @参数:@param response
* @参数:@throws ServletException
* @参数:@throws IOException
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
Integer schunk = null;//分割块数
Integer schunks = null;//总分割数
String name = null;//文件名
BufferedOutputStream outputStream=null;
if (ServletFileUpload.isMultipartContent(request)) {
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024);
factory.setRepository(new File(repositoryPath));//设置临时目录
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
upload.setSizeMax(1024 * 1024 * 1024);//设置文件最大值
List<FileItem> items = upload.parseRequest(request);
//生成新文件名
String newFileName = null;
for (FileItem item : items) {
if (!item.isFormField()) {// 如果是文件类型
name = item.getName();// 获得文件名
newFileName = UUID.randomUUID().toString().replace("-","").concat(".").concat(FilenameUtils.getExtension(name));
if (name != null) {
String nFname = newFileName;
if (schunk != null) {
nFname = schunk + "_" + name;
}
File savedFile = new File(uploadPath, nFname);
item.write(savedFile);
}
} else {
//判断是否带分割信息
if (item.getFieldName().equals("chunk")) {
schunk = Integer.parseInt(item.getString());
}
if (item.getFieldName().equals("chunks")) {
schunks = Integer.parseInt(item.getString());
}
if (item.getFieldName().equals("fileName")) {
System.out.println(item.getString());
}
}
}
if (schunk != null && schunk + 1 == schunks) {
outputStream = new BufferedOutputStream(new FileOutputStream(new File(uploadPath, newFileName)));
//遍历文件合并
for (int i = 0; i < schunks; i++) {
File tempFile=new File(uploadPath,i+"_"+name);
byte[] bytes=FileUtils.readFileToByteArray(tempFile);
outputStream.write(bytes);
outputStream.flush();
tempFile.delete();
}
outputStream.flush();
}
response.getWriter().write("{\"status\":true,\"newName\":\""+newFileName+"\"}");
} catch (FileUploadException e) {
e.printStackTrace();
response.getWriter().write("{\"status\":false}");
} catch (Exception e) {
e.printStackTrace();
response.getWriter().write("{\"status\":false}");
}finally{
try {
if(outputStream!=null)
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
public void init(ServletConfig config) throws ServletException {
repositoryPath = FileUtils.getTempDirectoryPath();
uploadPath = config.getServletContext().getRealPath(config.getInitParameter("uploadPath"));
File up = new File(uploadPath);
if(!up.exists()){
up.mkdir();
}
}
}
最近下载更多
oldfox LV19
2022年2月22日
kinguui LV1
2021年9月3日
xuexizhuanyong23 LV16
2021年3月2日
lyd19931203 LV21
2020年6月16日
bjgaocl LV13
2020年3月21日
skipple3 LV39
2020年3月3日
sun0224yu LV3
2020年1月6日
gggame LV1
2019年12月17日
6301339 LV2
2019年12月1日
jellyprince LV2
2019年11月17日

最近浏览