代码改变世界

spring-mvc-02

2018-12-02 14:50  crow!  阅读(162)  评论(0编辑  收藏  举报

文件上传

配置

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 设置了上传文件的最大容量  -->
        <property name="maxUploadSize" value="524888" />
        <!-- 设置上传操作使用的最大内存数量 -->
        <property name="maxInMemorySize" value="209715" />
        
        <!-- 配置这个后 出现错误之后,那么应该立刻交给一个专门的错误处理操作完成  -->
        <property name="resolveLazily" value="true" />
    </bean>
    
    <bean id="exceptionMapping" 
        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">
                    /errors.jsp
                </prop>
            </props>
        </property>        
    </bean>

如果上传的是超大文件tomcat的server.xml需配置 maxSwallowSize="-1"

<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" maxSwallowSize="-1"/>

 

java函数

    @RequestMapping(value="upload") 
    public ModelAndView addUpload(Emp emp,MultipartFile photo,
            HttpServletRequest request) {  //此处表接收的参数就是Emp类型
        String fileExt = null;
        if("image/jpg".equals(photo.getContentType())) {
            fileExt="jpg" ;
        }
        String outFilePath = request.getServletContext()
                .getRealPath("/upload/") + UUID.randomUUID() + "." + fileExt ;
        try {
            photo.transferTo(new File(outFilePath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null ;
    }
    
    @ExceptionHandler
    public ModelAndView exceptionHandle(Exception e) {   //专门处理异常
        System.out.println("********************" + e );
        ModelAndView mav = new ModelAndView("/errors.jsp"); //专门的错误显示页面
        if(e instanceof MaxUploadSizeExceededException ) {  //现在超过了最大的上传文件大小
            mav.addObject("error", "文件太大了!");
        }
        return mav;
    }