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

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

一、文件的上传

1、导包

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

  
        <dependency>
            <groupId>commons-fileuploadgroupId>
            <artifactId>commons-fileuploadartifactId>
            <version>1.3.3version>
        dependency>
2、准备jsp文件

说明:

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即可。

   
    <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代码
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>

                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">bean>

                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <constructor-arg value="utf-8">constructor-arg>
                bean>
                
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <property name="defaultCharset" value="utf-8">property>
                    <property name="supportedMediaTypes">
                        <list>
                            
                            <value>text/html;charset=UTF-8value>
                            <value>application/jsonvalue>
                        list>
                    property>
                bean>
            mvc:message-converters>
        mvc:annotation-driven>
        

你可能感兴趣的:(Spring)