📄 upload.java
字号:
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Iterator;
import java.util.List;
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.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class Upload extends HttpServlet {
File fileDir, tempDir;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
logInfo("[isMultipart]\t"+isMultipart);
final PrintWriter out = response.getWriter();
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置内存可用的大小
factory.setSizeThreshold(10240000);
//设置临时文件存储位置, 如果上传的文件比设置的可用内存大,则将上传的文件数据直接写入临时文件中
factory.setRepository(tempDir);
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置单个文件的最大上传size
upload.setFileSizeMax(10240000);
// 设置整个request的最大size
upload.setSizeMax(10240000);
ProgressListener progressListener = new MyProgressListener();
//监听文件的上传进度
upload.setProgressListener(progressListener);
// Parse the request
try {
List <FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {
processFormField(item);
} else {
processUploadedFile(item);
}
}
} catch (Exception e) {
e.printStackTrace();
}
response.setContentType("text/html");
out.println("upload success");
out.flush();
out.close();
}
private class MyProgressListener implements ProgressListener{
private long readedBytes = -1;
public void update(long pBytesRead, long pContentLength, int pItems) {
long mBytes = pBytesRead / 1000; //每1000字节处理一次
if (readedBytes == mBytes) {
return;
}
readedBytes = mBytes;
logInfo("正在处理第" + pItems+"项");
if (pContentLength == -1) {
logInfo("共读了" + pBytesRead + "个字节");
} else {
logInfo("到目前为止, "+pContentLength+"中的" + pBytesRead + "字节已被处理");
}
}
}
private void processFormField(FileItem item) {
String name = item.getFieldName();
String value = item.getString();
try {
//对表单中的字符依然需要进行编码转换,request.setCharacterEncoding,对表单域不起作用。
logInfo("(processFormField) [name]\t"+name+"\t[value]\t"+new String(value.getBytes("iso8859-1"), "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
private void logInfo(Object o){
System.out.println(o);
}
private String getFileName(String fileName){
//如果文件名为:c:\xx\你好.txt,则截取后面的"你好.txt"
int index = fileName.lastIndexOf('\\');
if(index == -1){
index = fileName.lastIndexOf('/');
}
if(index == -1){
return fileName;
}
if(index == fileName.length()-1){
return fileName;
}
return fileName.substring(index+1);
}
private void processUploadedFile(FileItem item) {
if (item.isFormField()) {
return;
}
String fieldName = item.getFieldName();
logInfo("[fieldName]\t"+fieldName);
String fileName = item.getName();
logInfo("[fileName]\t"+fileName);
String parsedFileName = getFileName(fileName);
logInfo("[parsedFileName]\t"+ parsedFileName);
String contentType = item.getContentType();
logInfo("[contentType]\t"+contentType);
boolean isInMemory = item.isInMemory();
logInfo("[isInMemory]\t"+isInMemory);
long sizeInBytes = item.getSize();
logInfo("[sizeInBytes]\t"+sizeInBytes);
File uploadedFile = new File(fileDir, parsedFileName);
if(uploadedFile.exists()){
//dosomething
}
try {
item.write(uploadedFile);
} catch (Exception e) {
e.printStackTrace();
}
}
public void init() throws ServletException {
fileDir = new File(this.getServletContext().getRealPath("/")+"upload");
if(! fileDir.exists()){
fileDir.mkdir();
}
tempDir = new File(this.getServletContext().getRealPath("/")+"upload"+File.separator+"temp");
if(! tempDir.exists()){
tempDir.mkdir();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -