SpringMVC中的文件的上传和下载问题

SpringMVC中的文件的上传和下载问题

一、文件的上传
1、导包

SpringMVC的文件上传依赖于Apache的FileUpload组件

  <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
2、准备jsp文件
<form method="post" action="/fileupload.action" enctype="multipart/form-data">
    <input type="file" name="file"><br>
    <input type="submit" value="文件上传">
</form>

说明:

1.form表单的method属性设置为post,不能使用get方法。
2.form 表单的enctype属性设置为multipart/form-data告诉它是多媒体文件

3、配置springmvc支持文件上传

当客户端form表单的enctype属性为multipart/form-data时,浏览器就会采用二进制流的方式来处理表单数据,服务器端就会对文件上传的请求进行解析处理。SpringMVC为文件上传提供了直接的支持,这种支持是通过MultipartResolver (多部件解析器)对象实现的。MultipartResolver 是一个接口对象,需要通过它的实现类CommonsMultipartResolver来完成文件上传工作。在Spring MVC 中使用MitipartResolver对象非常简单,只需要在配置文件中定义MultipartResolver接口的Bean即可。

   <!--允许SpringMVC实现文件的上传  注意事项 下面的名字multipartResolver不能乱写
        乱写要出问题
    -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="100000000"></property>
        <property name="defaultEncoding" value="UTF-8"></property>
    </bean>

说明:

maxUploadSize:上传文件最大长度(以字节为单位.)
maxInMemorySize:缓存中的最大尺寸。
defaultEncoding: 默认编码格式。 UTF-8.
resolveLazily:推迟文件解析

4、编写controller
  @RequestMapping("fileupload")
			//注意这里@RequestParam("")	里面的参数file与jsp表单里面的name一致	
    public String FileUpload(@RequestParam("file") MultipartFile multipartFile) throws IOException {
        //上传的文件名字
        String fileName=multipartFile.getOriginalFilename();
        System.out.println(fileName);
        //文件保存到哪里(以及保存的文件名字)
        multipartFile.transferTo(new File("C:\\Users\\Administrator\\Desktop\\2.jpg"));
        return "index.jsp";
    }
二、文件下载

文件下载就是将文件服务器中的文件下载到本机上

1、jsp代码
<form method="post" action="/filedownload.action" enctype="multipart/form-data">
    <input type="submit" value="文件下载">
</form>
2、编写controller
  @RequestMapping("filedownload")
    public ResponseEntity<byte[]> fileDownload() throws IOException {
        //设置下载头
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("content-Disposition","attachment;filename=ss.jpg");
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(new File("C:\\Users\\Administrator\\Desktop\\2.jpg")),httpHeaders, HttpStatus.OK);
    }
3、下载文件变大问题

如果你配置文件里面配置了消息转换器,文件下载的时候,文件大小会变大,打不开,此时需要配置byte的数组转换器。具体操作如下:


<mvc:annotation-driven>
            <!--    配置消息转换器-->
            <mvc:message-converters>
<!--                配置byte的数组转换器解决文件变大打不开问题-->
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
<!--                解决 @ResponseBody中文乱码问题-->
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <constructor-arg value="utf-8"></constructor-arg>
                </bean>
                <!--配合fastjson支持 如果我们返回的是java对象的话 那么默认就使用下面的消息转换器来转换内容-->
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <property name="defaultCharset" value="utf-8"></property>
                    <property name="supportedMediaTypes">
                        <list>
                            <!--顺序保持这样,避免IE下载出错 -->
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json</value>
                        </list>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值