首页 > 代码库 > servlet文件上传
servlet文件上传
package com.peng.web;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.codec.digest.DigestUtils;
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;
public class uploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//上传路径
File file =new File("E:/upload");
//上传临时路径
File tFile = new File("E:/tempupload");
//判断文件夹是否存在,如果不存在就创建
if (!file.exists()) {
file.mkdir();
}
//判断临时文件夹是否存在,如果不存在就创建
if (!tFile.exists()) {
tFile.mkdir();
}
//判断form中enctype="multipart/form-data"有没有写
if (ServletFileUpload.isMultipartContent(request)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置缓冲区大小
factory.setSizeThreshold(10*1024);
//设置临时文件夹
factory.setRepository(tFile);
ServletFileUpload upload = new ServletFileUpload(factory);
//设置文件上传的大小
upload.setSizeMax(10*1024*1024);
try {
//获取表单元素传过来的值
List<FileItem> fileItems = upload.parseRequest(request);
for(FileItem item : fileItems){
if (item.isFormField()) {
//普通的表单元素
item.getFieldName();//获取表单的name
item.getString();//获取表单的值
}else{
//文件元素,进行io操作
item.getName();//上传文件的文件名
item.getFieldName();//获取文件的name属性
item.getContentType();//获取文件的类型
item.getSize();//获取文件的大小
InputStream inputStream = item.getInputStream();
//根据MD5的值判断文件系统中是否存在被上传的文件
String path = haveFile(inputStream);
if(path != null) {
System.out.println("文件已经存在:" + path);
} else {
BufferedInputStream bis = new BufferedInputStream(item.getInputStream());
String newFileName = getFileNewName(item.getName());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(file,newFileName)));
byte[] buffer = new byte[1024];
int len = -1;
while((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.flush();
bos.close();
bis.close();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}
//防止名字重复
private String getFileNewName(String name) {
String extName = name.substring(name.lastIndexOf("."));
UUID uuid = UUID.randomUUID();
String newName = uuid.toString() + extName;
return newName;
}
//查看是否有相同的文件
public String haveFile(InputStream inputStream) {
String path = null;
try {
String md5 = DigestUtils.md5Hex(inputStream);
File file = new File("E:/upload");
File[] files = file.listFiles();
for(File subFile : files) {
InputStream ins = new FileInputStream(subFile);
String subFileMd5 = DigestUtils.md5Hex(ins);
if(md5.equals(subFileMd5)) {
path = subFile.getPath();
}
}
} catch (IOException e) {
e.printStackTrace();
}
return path;
}
}