SpringMVC实现文件上传

SpringMVC实现文件上传

一、文件上传的必要前提

1、form表单的enctype取值必须是:multipart/from-data (一般情况下的默认值是:application/x-www-form-urlencoded)

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

2、method属性取值必须是Post

3、提供一个文件选择域

二、文件上传的原理分析

当form表单的enctype取值不是默认值后:request.getParameter()将失效。

enctype=“application/x-www-form-urlencoded”时,form表单的正文内容是:key=value&key=value&key=value

当form表单的enctype取值为Mutilpart/form-data时,请求正文内容就变成:

每一部分就是MIME类型描述的正文


-----------------------------7de1a433602ac   分界符 
Content-Disposition: form-data; name="userName"  协议头 

aaa              协议的正文 
-----------------------------7de1a433602ac 
Content-Disposition: form-data; name="file"; 
filename="C:\Users\zhy\Desktop\fileupload_demofile\b.txt" 
Content-Type: text/plain         协议的类型(MIME 类型) 
 
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 
-----------------------------7de1a433602ac-- 

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

使用 Commons-fileupload 组件实现文件上传,需要导入该组件相应的支撑 jar 包:Commons-fileupload 和
commons-io。commons-io 不属于文件上传组件的开发 jar 文件,但Commons-fileupload 组件从 1.1 版本开始,它工作时需要 commons-io 包的支持。

三、SpringMVC传统方式文件上传

SpringMVC框架提供了MultipartFile对象,该对象表示SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的 name属性名称相同。

前端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的方式进行文件上传
    * */
    @RequestMapping("/fileupload2")
    public String fileupload2(HttpServletRequest request, MultipartFile upload) throws IOException {

        System.out.println("SpringMVC文件上传");

        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        File file=new File(path);

        if(!file.exists()){
            //创建文件夹
            file.mkdir();
        }

        String filename = upload.getOriginalFilename();

        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename=uuid+"-"+filename;

        upload.transferTo(new File(path,filename));
        return "success";
    }

配置文件解析器springmvc.xml

<!-- 配置文件解析器对象,要求id名称必须是multipartResolver -->    
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        
    <property name="maxUploadSize" value="10485760"/>    
</bean>

注意: 文件上传的解析器 id是固定的,不能起别的名称,否则无法实现请求参数的绑定。(不光是文件,其他字段也将无法绑定) ,并且前端上传文件的input的name值一定要和控制器中的MultipartFile upload的名称一致,否则无法实现。

四、springmvc跨服务器方式的文件传输

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

jsp代码块

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

控制器代码块

    /**
     * 跨服务器文件上传
     * @return
     */
    @RequestMapping("/fileupload3")
    public String fileuoload3(MultipartFile upload) throws Exception {
        System.out.println("跨服务器文件上传...");

        // 定义上传文件服务器路径
        String path = "http://localhost:9090/uploads/";

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

        // 创建客户端的对象
        Client client = Client.create();

        // 和图片服务器进行连接
        WebResource webResource = client.resource(path + filename);

        // 上传文件
        webResource.put(upload.getBytes());

        return "success";
    }

导入jar包,配置pom.xml文件

<!-- 配置文件上传解析器 --> 
<bean id="multipartResolver"  <!-- id 的值是固定的-->  class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
 <!-- 设置上传文件的最大尺寸为 5MB -->  
<property name="maxUploadSize">   
    <value>5242880</value>  
</property> 
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值