关闭

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

605人阅读 评论(0) 收藏 举报
分类:

例子是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());
		}
	}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:109345次
    • 积分:1684
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:115篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论