在用struts1.x 或struts2.x 是对与大文件的上传问题
1. 有一些时候可能会用到大文件的上传,但是struts 不支持一些上了几百mb 或几G 的文件
?
在这里我们介绍一个apache 提供的上传文件包
commons-fileupload-1.2.jar
commons-io-1.4.jar
?
实现原理就是先把文件上传到临时文件夹,当上传成功后在写到批定的上传文件夹中
?
package com.test;import java.io.File;import java.io.IOException;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.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * 上传文件servlet * 2008-10-6 * @author liuqing * @version 1.0 */public class UploadServlet extends HttpServlet {/** * 上传文件方法 * @param tempDirectory 上传文件 temp 文件夹 * @param encoding 上传文件编码 * @param uploadDirectory 上传文件目录 * @param request * @return void */public void uploadFile(String tempDirectory,String encoding,String uploadDirectory,HttpServletRequest request) {try {boolean isMultipart = ServletFileUpload.isMultipartContent(request);if (isMultipart) {//创建磁工厂,实现内存数据储存量和临时储存路经DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 4,new File(tempDirectory));//设置最多只允许在内存中存储的数据,单位:字节factory.setSizeThreshold(1024 * 4);ServletFileUpload upload = new ServletFileUpload(factory);upload.setHeaderEncoding(encoding);upload.setFileSizeMax(1024 * 1024 * 1024 * 5);List<FileItem> fileItems = upload.parseRequest(request);Iterator<FileItem> iter = fileItems.iterator();while (iter.hasNext()) {FileItem item = (FileItem)iter.next();if (item.isFormField()) {String name = item.getFieldName();String value = item.getString(encoding);System.out.println("" + name + " " + value);}else {String fileName = item.getName();if (fileName != null) {File fullFile = new File(item.getName());if (!this.isTooBig(fullFile.length())) {throw new Exception();}if (fullFile.exists()) {File fileOnServer = new File(uploadDirectory + fullFile.getName()); item.write(fileOnServer);}}}}}} catch (Exception e) {e.printStackTrace();}}/** * servlet 上传文件service 方法 */@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.uploadFile("d:\\uploadFile\\temp", "UTF-8", "d:\\uploadFile\\upload\", request);response.sendRedirect("success.jsp");}/** * 设置文件大小 MB */private static int maxSize = 100;/** * 判断文件大小是否太大 * @param argFileSize * @return */public boolean isTooBig(long argFileSize) {double fileSize = argFileSize / (1024.0 * 1024.0);System.out.println("safda" + fileSize);return fileSize > maxSize ? false:true;}/** * setter file size * @return int */public static void setMaxSize(int maxSize) {UploadServlet.maxSize = maxSize;}}
?