Spring MVC文件上传

Vincent · 发布于 2016-07-06 · 字数4962 · 浏览 1515 · 评论 0

1.    文件配置

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

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    <property name="defaultEncoding" value="utf-8"></property>   
    <property name="maxUploadSize" value="10485760000"></property>  
    <property name="maxInMemorySize" value="40960"></property>  
</bean>

其中属性详解:

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

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

<!– SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException –>
<!– 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 –>

<bean id="exceptionResolver" 
    class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
    <property name="exceptionMappings"> 
        <props> 
            <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 --> 
            <prop 
                key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop> 
        </props> 
    </property> 
</bean>

如果非要控制返回信息,可以考虑异常处理中返回指定格式数据,例如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<String> 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)//保存到一个目标文件中

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

本文系作者 Vincent 授权问说网发表,并经问说网编辑,转载请注明出处和 本文链接

相关文章

  • 2015-11-07Cyer类似jQuery的简单轻量级的JavaScript库
  • 2015-12-08Numeral.js处理数字时间格式化JavaScript库
  • 2016-03-31JavaScript获取标签的方法及兼容处理
  • 2016-04-26PageGuide.js交互式的可视化网页向导组件
  • 2016-05-20洗面奶详情页设计教程
  • 2016-05-21五步打造水晶质感梦幻水晶鞋
  • 2016-06-25分享50组使用纯CSS代码绘制的图标
  • 2016-07-06SVN
  • 发布评论

    为您推荐

    问说网 · 发布于 2016-04-08

    分享Web前端重构相关细节

    完全换血的重新设计相当消耗时间,因为所有的组件都需要重新书写,这里不仅仅包括那些被管理者看着不满的东西,还包括许多良好的组件,以及数据交换方式等,这里面隐患相当…

    问说网 · 发布于 2016-04-26

    PageGuide.js交互式的可视化网页向导组件

    PageGuide.js 是一个交互式的可视化网页向导组件,通过 PageGuide.js 可制作出友好的帮助提示,使用CSS3和jQuery技术显示提示,并不…

    响应式设计趋势的延续!留住用户与失去用户

    2015年响应式设计趋势的延续,也将带来更多的争议和思考,此文所引论据较为客观,点出了响应式概念的初衷和近年来跨屏设计的状况,并提供了解决思路和可参考的具体方法…

    • 响应式设计趋势的延续!留住用户与失去用户
    • 响应式设计趋势的延续!留住用户与失去用户
    • 响应式设计趋势的延续!留住用户与失去用户
    • 响应式设计趋势的延续!留住用户与失去用户
    AugustusMike · 发布于 2016-05-15 · 浏览 1081 · 评论 0
    3种方法实现网页自动刷新重新加载
    问说网 · 发布于 2016-05-28

    3种方法实现网页自动刷新重新加载

    有时候我们需要网页自动刷新,比如用户通过Ajax加载了一些东西,而此时我们通过JavaScript无法完成网页内容的修改,那么我们就需要网页自动刷新。

    问说网 · 发布于 2016-06-24

    Gridpak响应式轻量级Web开发框架

    Gridpak 的目的是实现了响应式的 Web 页面设计,提高工作流程,节省了时间。通过生成PNG图像,CSS和JavaScript,让 Gridpak 创建响…

    问说网 · 发布于 2016-07-05

    刷流量的注意了使用流量宝可能会中毒!

    相信大家都知道刷流量的有很多软件,最著名的就是流量精灵和流量宝,而我一直使用的流量宝,两个软件的使用基本差不多,可是你知道吗?使用流量刷流量可能会中毒,这不是危…

    SVN
    Vincent · 发布于 2016-07-06

    SVN

    下载 Subversion(SVN服务端): 下载地址1 下载地址2 TortoiseSVN(SVN客户端): 下载地址1 下载地址2   安装 SV…

    详细讲解JAVA中的IO流
    Vincent · 发布于 2016-07-06

    详细讲解JAVA中的IO流

    包 java.io   文件路径 1. java.io.File是文件和目录路径名的抽象表示形式 2. 抽象路径名中的第一个名称是目录名,抽象路径名中…

    问说网手机版

    躺着 站着 跪着轻松访问

    更多详情 关于作者

    Vincent

    这个人比较懒,什么都没有填写!

    19 文章
    0 评论
    人气

    更多 热门话题

    APP界面

    关注 APP界面

    文章 41506 · 浏览 3658

    APP欣赏

    关注 APP欣赏

    文章 41427 · 浏览 3415

    APP手机界面

    关注 APP手机界面

    文章 41417 · 浏览 3687

    图片素材

    关注 图片素材

    文章 29463 · 浏览 2922

    高清图片

    关注 高清图片

    文章 26530 · 浏览 3160

    更多 推荐作者

    关注 秋末残雪

    文章 106 · 评论 0

    关注 惢碎葬爱

    文章 96 · 评论 0

    关注 倾听寂寞

    文章 83 · 评论 0

    关注 溫柔的溫柔

    文章 91 · 评论 0

    关注 莪很迷茫

    文章 97 · 评论 0

    关注 流浪的脚步

    文章 86 · 评论 0

    
    顶部 反馈 评论 底部

    意见反馈

    感谢您对问说网的支持,提出您在使用过程中遇到的问题或宝贵建议,您的反馈对我们产品的完善有很大帮助。

    您的反馈我们已收到!

    感谢您提供的宝贵意见,我们会在1-2个工作日,通过您留下的联系方式将处理结果反馈给您!