java 支持 超大上G , 多附件上传

java 支持 超大上G , 多附件上传

 

首先 确定要上传的目录

 

WEB.XML 文件

 

Java代码   收藏代码
  1.         <listener>  
  2.         <listener-class ><!-- 临时文件收集器 , 支持超大附件必须项 -->  
  3.           org.apache.commons.fileupload.servlet.FileCleanerCleanup  
  4.         </listener-class >  
  5.     </listener>  
  6.   
  7.     <context-param>  
  8.         <param-name>tempXlsPath</param-name><!-- 要上传的目录 -->  
  9.         <param-value>/WEB-INF/temp/</param-value>  
  10.     </context-param>  
  11.   
  12.   
  13. <servlet>  
  14.  <servlet-name>UploadServlet</servlet-name>  
  15.         <servlet-class >  
  16.             com.thams.web.fileServlet.UploadServlet  
  17.         </servlet-class >  
  18.     </servlet>  
  19.     <servlet-mapping>  
  20.         <servlet-name>UploadServlet</servlet-name>  
  21.         <url-pattern>/servlet/UploadServlet</url-pattern>  
  22.     </servlet-mapping>  
        <listener>
	    <listener-class><!-- 临时文件收集器 , 支持超大附件必须项 -->
	      org.apache.commons.fileupload.servlet.FileCleanerCleanup
	    </listener-class>
  	</listener>

	<context-param>
		<param-name>tempXlsPath</param-name><!-- 要上传的目录 -->
		<param-value>/WEB-INF/temp/</param-value>
	</context-param>


<servlet>
 <servlet-name>UploadServlet</servlet-name>
		<servlet-class>
			com.thams.web.fileServlet.UploadServlet
		</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>UploadServlet</servlet-name>
		<url-pattern>/servlet/UploadServlet</url-pattern>
	</servlet-mapping>
 

 

servlet

 

Java代码   收藏代码
  1. package  com.thams.web.fileServlet;  
  2.   
  3. import  java.io.File;  
  4. import  java.io.IOException;  
  5. import  java.util.List;  
  6.   
  7. import  javax.servlet.ServletContext;  
  8. import  javax.servlet.ServletException;  
  9. import  javax.servlet.http.HttpServlet;  
  10. import  javax.servlet.http.HttpServletRequest;  
  11. import  javax.servlet.http.HttpServletResponse;  
  12.   
  13. import  org.apache.commons.fileupload.FileItem;  
  14. import  org.apache.commons.fileupload.FileItemFactory;  
  15. import  org.apache.commons.fileupload.FileUploadException;  
  16. import  org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  17. import  org.apache.commons.fileupload.servlet.FileCleanerCleanup;  
  18. import  org.apache.commons.fileupload.servlet.ServletFileUpload;  
  19. import  org.apache.commons.io.FileCleaningTracker;  
  20. import  org.apache.commons.io.FilenameUtils;  
  21. import  org.apache.log4j.Logger;  
  22.   
  23. /**  
  24.  * @author serv  
  25.  */   
  26. public   class  UploadServlet  extends  HttpServlet {  
  27.   
  28.     private   static  Logger log = Logger.getLogger(UploadServlet. class );  
  29.       
  30.     protected   void  service(HttpServletRequest request,  
  31.             HttpServletResponse response) throws  ServletException, IOException {  
  32.         response.setContentType("text/html;charset=UTF-8" );  
  33.         // Check that we have a file upload request   
  34.         boolean  isMultipart = ServletFileUpload.isMultipartContent(request);  
  35.         if  (!isMultipart) {  
  36.             log.debug("没有可上传的文件, 你想干什么 !" );  
  37.             return ;  
  38.         }  
  39.         // Create a factory for disk-based file items   
  40.         String tempFilePath = getServletContext().getRealPath("/" )+getServletContext().getInitParameter( "tempXlsPath" );  
  41.         FileItemFactory factory = newDiskFileItemFactory(getServletContext(), new  File(tempFilePath));  
  42.         // Create a new file upload handler   
  43.         ServletFileUpload upload = new  ServletFileUpload(factory);  
  44.         upload.setHeaderEncoding("UTF-8" );  
  45.         /* FileItem */   
  46.         List<FileItem> items = null ;  
  47.         try  {  
  48.             // Parse the request   
  49.             items = (List<FileItem>) upload.parseRequest(request);  
  50.             String filename = null ;  
  51.             for  (FileItem fileItem : items) {  
  52.                 if  (!fileItem.isFormField()){ //file   
  53.                     filename = FilenameUtils.getName(fileItem.getName());  
  54.                     fileItem.write(new  File(tempFilePath+filename));  
  55.                     response.getWriter().write(tempFilePath+filename+"<br>" );  
  56.                 }  
  57.             }  
  58.         } catch  (FileUploadException e) {  
  59.             log.error(e.getMessage());  
  60.         } catch  (Exception e) {  
  61.             log.error(e.getMessage());  
  62.         }  
  63.     }  
  64.     /**  
  65.      * The FileCleanerCleanup provides an instance of org.apache.commons.io.FileCleaningTracker.   
  66.      * This instance must be used when creating a org.apache.commons.fileupload.disk.DiskFileItemFactory.  
  67.      */   
  68.     public   static  DiskFileItemFactory newDiskFileItemFactory(  
  69.             ServletContext context, File repository) {  
  70.         FileCleaningTracker fileCleaningTracker = FileCleanerCleanup  
  71.                 .getFileCleaningTracker(context);  
  72.         DiskFileItemFactory factory = new  DiskFileItemFactory(  
  73.                 DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, repository);  
  74.         factory.setFileCleaningTracker(fileCleaningTracker);  
  75.         return  factory;  
  76.     }  
  77.   
  78. }  
package com.thams.web.fileServlet;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletContext;
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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.FileCleanerCleanup;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileCleaningTracker;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;

/**
 * @author serv
 */
public class UploadServlet extends HttpServlet {

	private static Logger log = Logger.getLogger(UploadServlet.class);
	
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		// Check that we have a file upload request
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		if (!isMultipart) {
			log.debug("没有可上传的文件, 你想干什么 !");
			return;
		}
		// Create a factory for disk-based file items
		String tempFilePath = getServletContext().getRealPath("/")+getServletContext().getInitParameter("tempXlsPath");
		FileItemFactory factory = newDiskFileItemFactory(getServletContext(), new File(tempFilePath));
		// Create a new file upload handler
		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setHeaderEncoding("UTF-8");
		/* FileItem */
		List<FileItem> items = null;
		try {
			// Parse the request
			items = (List<FileItem>) upload.parseRequest(request);
			String filename = null;
			for (FileItem fileItem : items) {
				if (!fileItem.isFormField()){//file
					filename = FilenameUtils.getName(fileItem.getName());
					fileItem.write(new File(tempFilePath+filename));
					response.getWriter().write(tempFilePath+filename+"<br>");
				}
			}
		} catch (FileUploadException e) {
			log.error(e.getMessage());
		} catch (Exception e) {
			log.error(e.getMessage());
		}
	}
	/**
	 * The FileCleanerCleanup provides an instance of org.apache.commons.io.FileCleaningTracker. 
	 * This instance must be used when creating a org.apache.commons.fileupload.disk.DiskFileItemFactory.
	 */
	public static DiskFileItemFactory newDiskFileItemFactory(
			ServletContext context, File repository) {
		FileCleaningTracker fileCleaningTracker = FileCleanerCleanup
				.getFileCleaningTracker(context);
		DiskFileItemFactory factory = new DiskFileItemFactory(
				DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, repository);
		factory.setFileCleaningTracker(fileCleaningTracker);
		return factory;
	}

}

 

测试页面

 

Java代码   收藏代码
  1. <form action= "servlet/UploadServlet"  method= "post"  enctype= "multipart/form-data" >  
  2.             <input id="file1"  name= "file1"  type= "file"   class = "input400" ><br>  
  3.             <input id="file2"  name= "file2"  type= "file"   class = "input400" ><br>  
  4.             <input id="file3"  name= "file3"  type= "file"   class = "input400" ><br>  
  5.             <input id="file4"  name= "file4"  type= "file"   class = "input400" ><br>  
  6.             <input type="submit"  id= "submit"  value= "提交"  />  
  7.         </form>  
<form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
			<input id="file1" name="file1" type="file" class="input400"><br>
			<input id="file2" name="file2" type="file" class="input400"><br>
			<input id="file3" name="file3" type="file" class="input400"><br>
			<input id="file4" name="file4" type="file" class="input400"><br>
			<input type="submit" id="submit" value="提交" />
		</form>
 

测试结果

 


页面输出:

 


 

 

  • 大小: 13.1 KB
  • 大小: 6.5 KB
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值