etmvc upload问题

et-mvc上传文件是对Commons-fileupload组件的封装,所以使用时需要引入commons-fileupload.jar, commons-io.jar, commons-logging.jar三个包。
上传文件的第一步就是象下面一样创建一个multipart/form-data表单:

            

             

         

然后编写控制器,定义上传的Action方法:

 

public class UploadController extends ApplicationController{     

 public String doUpload(MultipartFile file) throws Exception{       

   file.transferTo(new File("e:/temp/" + file.getOriginalFilename()));        

   return file.getOriginalFilename()+":"+file.getSize();    

 } 

}

  

上传的方法,封装好了,可以获取表单里正常传入的值。

上传时候,用原始的方法却上传不成功(代码如下):

boolean isFileUpload = ServletFileUpload.isMultipartContent(request);//检测是否存在文件上传的请求
     if(isFileUpload){
      // 处理磁盘文件工厂类
      FileItemFactory factory = new DiskFileItemFactory();
      // 文件上传的处理类
      ServletFileUpload upload = new ServletFileUpload(factory);
      //解析上传的文件
      List fileItems = upload.parseRequest(request);

     for (Iterator iterator = fileItems.iterator(); iterator.hasNext();){
      FileItem fileItem= (FileItem) iterator.next();
      if(!fileItem.isFormField()){
       
      }else{
       String contentType = fileItem.getContentType().toLowerCase();// 比如:image/pjpg
       //进行格式的判断
       if (contentType.indexOf("excel") != -1) {
        //对文件上传的处理

        String fileUploadPath=fileItem.getName();

       // 上传之后文件的名字要唯一:采用当前上传的系统时间的毫秒数作为文件的名字

        String time = System.currentTimeMillis() + "";// 当前系统时间

        String postfix = fileUploadPath.substring(fileUploadPath.lastIndexOf("."));//获取文件的后缀名

        String fileName = time+postfix;

        String contextPath =this.getServletContext().getRealPath("upload");//获取工程中的名为upload的目录
        
        System.out.println(contextPath);

        filePath = contextPath+File.separator+fileName;
        

        file = new File(filePath);//代表上传文件的目录

        System.out.println("上传成功!");
        
        FileOutputStream output =  new FileOutputStream(file);

        InputStream in = fileItem.getInputStream();

        IOUtils.copy(in,output);
        
        IOUtils.closeQuietly(output);//关闭输出流

        IOUtils.closeQuietly(in);//关闭输出流
        
        b = true;
        continue;
        
       }else {
        System.out.println("文件格式错误");
        continue;
       }
      }
     }
     }

  

这种方法,总是在List fileItems = upload.parseRequest(request);这里获取不到值,还没确定原因,有待于进一步研究。

 

 

需要下载文件时,可以使用BinaryView,如下所示:
    public BinaryView download() throws Exception{        

          BinaryView view = BinaryView.loadFromFile("e:/temp/arrow.gif");        

          view.setContentType("image/gif");        

           //view.setContentDisposition("attachment"); //下载        

            return view;    

    }



看起来应该是比较简单的。

 

 

 

你可能感兴趣的:(etmvc upload问题)