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

例子是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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值