java基于servlet利用common-fileupload上传文件

原创 2016年08月29日 10:30:14

例子是servlet下的上传,利用common-fileupload

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;

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;

import java.util.Iterator;
import java.util.List;
import java.util.RandomAccess;
import java.util.UUID;


public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		try
		{
			//文件写入位置
			long nPos=0;
			//获取FileItem的的文件流
			InputStream iStream=null;
			// 判断enctype属性是否为multipart/form-data
			boolean isMultipart = ServletFileUpload.isMultipartContent(request);
			//临时目录名  
	        String tempPath = "d:\\temp\\";//"./TempPath/";
	        //真实目录名  
	        String filePath = "d:\\upload\\";//"./UploadFile/";
	        //真实上传路径
	        StringBuffer sbRealPath = new StringBuffer();
	        
			
			// Create a factory for disk-based file items
			DiskFileItemFactory factory = new DiskFileItemFactory();
	
			// 当上传文件太大时,因为虚拟机能使用的内存是有限的,所以此时要通过临时文件来实现上传文件的保存
			// 此方法是设置是否使用临时文件的临界值(单位:字节)
			factory.setSizeThreshold(5*1024);
	
			// 与上一个结合使用,设置临时文件的路径(绝对路径)
			factory.setRepository(new File(tempPath));
	
			// Create a new file upload handler
			ServletFileUpload upload = new ServletFileUpload(factory);
	
			// 设置上传内容的大小限制(单位:字节)
			upload.setSizeMax(Integer.valueOf(1)*1024*1024);//1MB
	
			// Parse the request
			List<?> items = upload.parseRequest(request);
	
			
			Iterator iter = items.iterator();
			while (iter.hasNext()) 
			{
			    FileItem item = (FileItem) iter.next();
	
			    if (item.isFormField()) 
			    {
			    	//如果是普通表单字段
			        String name = item.getFieldName();
					String value = item.getString();
					//处理普通表单字段
					nPos=Integer.parseInt(value);
			    } 
			    else 
			    {
			    	//如果是文件字段
			        	String fieldName = item.getFieldName();
					    String fileName = item.getName();
					    String contentType = item.getContentType();
						//创建文件唯一名称  
	                    String uuid = UUID.randomUUID().toString(); 
	                  //检查文件后缀格式  
	                    String fileExpansion = fileName.substring(fileName.lastIndexOf(".")+1).toLowerCase();  
	                    //真实上传路径   
	                    sbRealPath.append(filePath).append(fileName).append(".").append(fileExpansion); 
	                    System.out.println(sbRealPath.toString());
	                    boolean isInMemory = item.isInMemory();
					    long receiveSize = item.getSize();
					    //获取文件流
					    iStream = item.getInputStream();
					    //写入文件
					    //File uploadedFile = new File(sbRealPath.toString());
					    //item.write(uploadedFile);
			    }
			}
			//写入到文件
	    	RandomAccessFile oSavedFile = new RandomAccessFile(sbRealPath.toString(),"rw"); 
	    	// 定位文件指针到 nPos 位置 
	    	oSavedFile.seek(nPos); 
		    System.out.println(nPos);
	    	byte[] b = new byte[1024]; 
	    	int nRead; 
	    	// 从输入流中读入字节流,然后写到文件中 
	    	while((nRead=iStream.read(b,0,1024)) > 0) 
	    	{ 
	    	oSavedFile.write(b,0,nRead); 
	    	}
	    	//获取当前文件写入位置
			long filePosition = oSavedFile.getFilePointer();
			System.out.println(filePosition);
	    	iStream.close();
	    	oSavedFile.close();
		    //返回接收到的字节长度
			response.setContentType("text/html");
			PrintWriter out = response.getWriter();
			out.print(filePosition);
			out.flush();
			out.close();
		}
		catch(Exception e)
		{
			System.out.println(e.getMessage());
		}
	}


版权声明:本文为博主原创文章,未经博主允许不得转载。

使用servlet实现文件上传(用common-fileUpload和common-io包)

用servlet实现文件的上传,这里用到Apache的开源工具:common-fileupload。因为common-fileupload依赖于common-io,所以需要同时下载两个包。 co...
  • FateHJ
  • FateHJ
  • 2016年04月03日 15:07
  • 2189

openlayers with Google maps 简单教程

转自:http://www.07net01.com/2015/07/867199.html what is openlayer openlayers是一个高性能、功能全面的地图库。有以下特...
  • wpz0713
  • wpz0713
  • 2016年08月12日 13:50
  • 864

【JavaWeb-13】文件上传DiskFileItemFactory、ServletFileUpload以及注意事项、文件下载及注意事项

1、文件上传我们用的是Apache的common组件,里面有个fileupload的jar包,因为用到输出输入流,所以需要导入io的jar包。——要上传文件,form表单里面需要增加enctype属性...

java servlet common-fileupload 实现的文件批量上传

java servlet common-fileupload 实现的文件批量上传 转自http://coconut-zhang.iteye.com/blog/1909221   结合前辈们...
  • biti035
  • biti035
  • 2015年07月02日 23:10
  • 189

Java上传文件common-fileupload

jsp文件上传大多采用开源项目Commons FileUpload来简化处理,可以在http://jakarta.apache.org/commons/fileupload/下载,这个包需要Commo...

java common-fileupload实现上传多个文件,在同一个input框中实现

1.前台页面 function handleFiles(fileList){        $('#fileupload').submit();     } ...

Java文件上传组件 common-fileUpload 使用教程

最近项目中,在发布商品的时候要用到商品图片上传功能(网站前台和后台都要用到),所以单独抽出一个项目来供其他的项目进行调用 ,对外透露的接口的为两个servlet供外部上传和删除图片,利用到连个jarc...

使用servlet实现文件上传(用common-fileUpload和common-io包)

http://blog.csdn.net/fatehj/article/details/51050437 用servlet实现文件的上传,这里用到Apache的开源工具:common-f...

Servlet中配合common-fileupload.jar和common-io.jar进行文件上传

common-fileupload.jar和common-io.jar是apache组织下文件上传的开发包,有了这两个jar包,文件上传将变得方便很多。 ①上传文件的界面 文件上传. ...
  • csndmi
  • csndmi
  • 2013年04月30日 18:58
  • 1040
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java基于servlet利用common-fileupload上传文件
举报原因:
原因补充:

(最多只允许输入30个字)