SpringMVC实现文件上传

Posted mkl7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC实现文件上传相关的知识,希望对你有一定的参考价值。

 

 

SpringMvc文件上传和下载

文件上传的回顾

 

文件上传的必要前提

1. from表单的enctype取值必须是 multipart/from-data

  (默认值是:application/x-www-form-urlencoded)

  enctype:是表单请求正文的类型

2. method属性取值必须是Post

3.提供一个文件选择域<input type=”file” />

 

借助第三方组件实现文件上传

使用Commons-fileupload组件实现文件上传,

需要导入该组件相应的支撑jar包:Commons-fileupload和commons-io。

commons-io 不属于文件上传组件的开发jar文件,但Commons-fileupload 组件从1.1 版本开始,它工作时需要commons-io包的支持。

 

1. 导入文件上传的jar包

<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>

 

2. 编写文件上传的JSP页面:

<h3>文件上传</h3>
<form action="user/fileupload" method="post" enctype="multipart/form-data">
  选择文件:<input type="file" name="upload"/><br/>
  <input type="submit" value="上传文件"/>
</form>

 

3. 编写文件上传的Controller控制器

/**
     * 文件上传
     * @return
     */
    @RequestMapping("/fileupload1")
    public String fileuoload1(HttpServletRequest request) throws Exception {
        System.out.println("文件上传...");

        // 使用fileupload组件完成文件上传
        // 上传的位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        // 判断,该路径是否存在
        File file = new File(path);
        if(!file.exists()){
            // 创建该文件夹
            file.mkdirs();
        }

        // 解析request对象,获取上传文件项
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 解析request List<FileItem> items = upload.parseRequest(request); // 遍历 for(FileItem item:items){ // 进行判断,当前item对象是否是上传文件项 if(item.isFormField()){ // 说明普通表单向 }else{ // 说明上传文件项 // 获取上传文件的名称 String filename = item.getName(); // 把文件的名称设置唯一值,uuid String uuid = UUID.randomUUID().toString().replace("-", ""); filename = uuid+"_"+filename; System.out.println ("filename : "+filename); // 完成文件上传 item.write(new File(path,filename)); // 删除临时文件 item.delete(); } } return "success"; }

 

springmvc传统方式的文件上传

传统方式的文件上传,指的是我们上传的文件和访问的应用存在于同一台服务器上。 并且上传完成之后,浏览器可能跳转。

 

Jsp代码

 

    <h3>Springmvc文件上传</h3>
    <form action="user/fileupload2" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="upload" /><br/>
        <input type="submit" value="上传" />
    </form>

 

 

 

控制器代码:

 

    /**
     * SpringMVC文件上传
     * @return
     */
    @RequestMapping("/fileupload2")
    public String fileuoload2(HttpServletRequest request, MultipartFile upload) throws Exception {
        System.out.println("springmvc文件上传...");
        // 使用fileupload组件完成文件上传
        // 上传的位置
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        // 判断,该路径是否存在
        File file = new File(path);
        if(!file.exists()){
            // 创建该文件夹
            file.mkdirs();
        }

        // 说明上传文件项
        // 获取上传文件的名称
        String filename = upload.getOriginalFilename();
        // 把文件的名称设置唯一值,uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid+"_"+filename;
        // 完成文件上传
        upload.transferTo(new File(path,filename));

        return "success";
    }

 

 

配置文件解析器:

文件上传的解析器id是固定的,不能起别的名称,否则无法实现请求参数的绑定。(不光是文件,其他字段也将无法绑定)

 

<!--配置文件解析器对象-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
   <!-- 设置上传文件的最大尺寸 -->

<property name="maxUploadSize" value="10485760" />
</bean>

 

以上是关于SpringMVC实现文件上传的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC + AJAX 实现多文件异步上传

SpringMVC——文件上传拦截器

mvc 无法上传大文件 提示超过长度

♥springMVC实现文件的上传和下载♥

♥springMVC实现文件的上传和下载♥

♥springMVC实现文件的上传和下载♥