⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upload.java

📁 这是用jsp做的
💻 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 + -