一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

java中Spring MVC文件上传的例子

时间:2016-07-07 编辑:简简单单 来源:一聚教程网

首先需要配置是加入两个 jar包:
commons-fileupload-1.2.2.jar
commons-io-2.1.jar

1.    文件配置

SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver来明确告诉DispatcherServlet如何处理MultipartRequest

 
      
     
     

其中属性详解:

defaultEncoding=”UTF-8″ 是请求的编码格式,默认为iso-8859-1
maxUploadSize=”5400000″ 是上传文件的大小,单位为字节
uploadTempDir=”fileUpload/temp” 为上传文件的临时路径

注意这里的文件尺寸实际上只的是所有文件总大小,如果不设置大小,则默认是不限制文件大小
如果配置了文件大小就以为这你需要配置异常信息控制
所以需要配置异常显示


    class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
   
        ps>
           
                            key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload
       
   


如果非要控制返回信息,可以考虑异常处理中返回指定格式数据,例如JSON ??

配置完了页面上一如既往的需要再form表单中增加:enctype=”multipart/form-data”, method=”post”
然后就是需要处理的action了,可以有两种方式

第一种方式:

单文件

public String xxx( @RequestParam MultipartFile file, ...) {  
………………  
}
多文件

public String xxx(@RequestParam MultipartFile[] files, ...) {  
………………  
}
第二种方式:

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {    
    // 转型为MultipartHttpRequest:    
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;    
    // 获得文件:    
    MultipartFile file = multipartRequest.getFile(" file ");   
}
示例代码

@RequestMapping("/upload2"  )
public String upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException {
    //创建一个通用的多部分解析器
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
    //判断 request 是否有文件上传,即多部分请求
    if(multipartResolver.isMultipart(request)){
        //转换成多部分request 
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
        //取得request中的所有文件名
        Iterator iter = multiRequest.getFileNames();
        while(iter.hasNext()){
            //取得上传文件
            MultipartFile file = multiRequest.getFile(iter.next());
            if(file != null){
                //取得当前上传文件的文件名称
                String myFileName = file.getOriginalFilename();
                //如果名称不为“”,说明该文件存在,否则说明该文件不存在
                if(myFileName.trim() !=""){
                    //定义上传路径
                    String path = request.getSession().getServletContext().getRealPath("/upload")+ file.getOriginalFilename();
                    File localFile = new File(path);

                    //效率比使用字节流转存高的多
                    file.transferTo(localFile);
                }
            }
        }    
    }
    return "/success";
}
MultipartFile类常用的一些方法:
String getContentType()//获取文件MIME类型
InputStream getInputStream()//后去文件流
String getName() //获取表单中文件组件的名字
String getOriginalFilename() //获取上传文件的原名
long getSize() //获取文件的字节大小,单位byte
boolean isEmpty() //是否为空
void transferTo(File dest)//保存到一个目标文件中

热门栏目