springMVC 下文件上传

4 篇文章 0 订阅
1 篇文章 0 订阅

1. 使用springMVC  自带的文件上传bean

springmvc.xml 配置

 <bean id="multipartResolver" 

   class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

  1. package com.aa.controller;  
  2. import java.io.File;  
  3. import java.util.Date;   
  4. import javax.servlet.http.HttpServletRequest;   
  5. import org.springframework.stereotype.Controller;  
  6. import org.springframework.ui.ModelMap;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import org.springframework.web.bind.annotation.RequestParam;  
  9. import org.springframework.web.multipart.MultipartFile;  
  10.   
  11. @Controller  
  12. public class UploadAction {  
  13.   
  14.     @RequestMapping(value = "/fileUpload")  
  15.     public String _fileUpload(@RequestParam(value ="file",
  16.       required=false) MultipartFile file,
  17.        HttpServletRequest  request, ModelMap model) {  
  18.         String path = request.getSession().
  19.             getServletContext().getRealPath("upload");  
  20.         String fileName = file.getOriginalFilename();   
  21.         File targetFile = new File(path, fileName);  
  22.         if(!targetFile.exists()){  
  23.             targetFile.mkdirs();  
  24.         }        
  25.     try {  
  26.           file.transferTo(targetFile);  //文件保存
  27.         } catch (Exception e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.         model.addAttribute("fileUrl",
  31.            request.getContextPath()+"/upload/"+fileName);    
  32.         return "result";  
  33.     }    
  34. }  

  

        
       /*
        * 直接使用CommonsMultipartResolver 文件上传器
        * 
        */
	@RequestMapping(value="/home/SimpleFileStore/uploadFile1",method={RequestMethod.POST})
	public void _uploadFile1(HttpServletRequest request
          ,HttpServletResponse response) throws IOException{  
	    Long startTime = System.currentTimeMillis();
	    String docpath = request.getSession().getServletContext().getRealPath("upload");
	    CommonsMultipartResolver commonsMultipartResolver = new    
                         CommonsMultipartResolver(request.getSession().getServletContext());                                                  
	    commonsMultipartResolver.setDefaultEncoding("utf-8");  // 设置编码 
	     // 判断是否有文件上传  
	     if (commonsMultipartResolver.isMultipart(request)) {  
	        //将request变成多部分request  
	        MultipartHttpServletRequest multiRequest =
                              (MultipartHttpServletRequest)request;  	              
	        //获取multiRequest 中所有的文件名  
	        Iterator<String> iter = multiRequest.getFileNames();  
	        while(iter.hasNext()){
	           MultipartFile file = multiRequest.getFile(iter.next());
	           String path = docpath+File.separator+
                      (new Date()).getTime()+file.getOriginalFilename();
	           File storageFile = new File(path);
	           file.transferTo(storageFile);
	        }
	     }
	     Long endTime = System.currentTimeMillis();	
	     log.debug("耗时 ms:"+(endTime-startTime));		
	     response.getWriter().write("");  //指定form target为iframe可以实现区部刷新
        }
				


2. 使用 List<FileItem> items = upload.parseRequest(request); 分离文件流和 其他控件参数

    注意:这种方法与springmvc默认的 上传解析器 冲突  会造成 items获取不到值  必须注释掉下面代码:

springmvc.xml 配置 <!-- <bean id="multipartResolver"

       class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> -->

       

@RequestMapping(value="/home/SimpleFileStore/uploadFile",method={RequestMethod.POST}) 
public void _uploadFile(HttpServletRequest request, 
  HttpServletResponse response) throws IOException{       
  String contentType = request.getContentType();  
try {     
   if(contentType !=null && contentType.startsWith("multipart/")){         
     FileHelper.storeFile(request,response); 
   }else{ 
   	throw new RuntimeException("不支持的 contentType"); 
   } 
  } catch (Exception e) {e.printStackTrace();
   throw new RuntimeException("storeFile异常");
  }
 response.getWriter().write("");
} 
public static void storeFile(HttpServletRequest request, 
   HttpServletResponse response) throws Exception{ 
     HashMap<String,String> params = new HashMap<String,String>(); 
      List<FileItem> items = parseMultipartRequest(request); 
      Iterator<FileItem> iter = items.iterator(); 
      FileItem fileItem = null;
     while (iter.hasNext()) { 
       FileItem item = iter.next();
       if (item.isFormField()) { 
         String name = item.getFieldName(); 
        String value = item.getString(); params.put(name, value); 
          }else{
	    /*String fieldName = item.getFieldName(); 
	   String fileName = item.getName(); 
	   String contentType = item.getContentType(); 
	   boolean isInMemory = item.isInMemory(); 
	   long sizeInBytes = item.getSize();*/ 
         fileItem = item;
       }
      }
      if(fileItem != null){
	  String storePath = docStorePath + File.separator+ params.get("fileDirect");
	  File storeDir = new File(storePath); 
	  if(!(storeDir.exists() && storeDir.isDirectory())){
	    storeDir.mkdirs(); 
	  } 
     File toStoreFile = new File(storePath +File.separator + params.get("storeFileName"));
     fileItem.write(toStoreFile); 
    } 
 } 
/** * 创建指定文件目录 并返回该目录对象 * @param path * @return */ 
public static File getOrCreateFile(String path) {
	 File storeDir = new File(path); 
	 if(!(storeDir.exists() && storeDir.isDirectory())){
	 storeDir.mkdirs();  return storeDir;
 } 
/** * 从request中获取表单的每一项 文件流 以及普通控件参数 * @param request * @return * @throws FileUploadException */ 
public static List<FileItem> parseMultipartRequest(HttpServletRequest
   request) throws FileUploadException{
		 DiskFileItemFactory factory = new DiskFileItemFactory(); 
		 ServletContext servletContext = request.getSession().getServletContext();
		 File repository =(File)servletContext.getAttribute("javax.servlet.context.tempdir");
		 factory.setRepository(repository); 
		// Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); 
		// Parse the request List items = upload.parseRequest(request); 
   return items; 
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值