Spring MVC 下载文件时文件内容乱码问题

Spring MVC 下载文件时文件内容乱码问题

今天在做文件上传的时候,同时需要做下载的功能,上传使用Spring的上传功能很方便,以参数的形式就可以接收到文件,直接调用transferTo保存文件就可以了。但是做下载功能的时候需要返回文件流,就遇到问题了,文件名没问题,下载也正常,但是内容就是一串字母数字,类似MD5的字符串。

下载的代码如下:

@ResponseBody
@RequestMapping(value = "/download")
public ResponseEntity<?>  downloadFile(@RequestParam("fileUrl") String fileUrl) throws IOException {
    System.out.println(fileUrl);
    File file = new File(basePath+ "/" + fileUrl);
    //处理显示中文文件名的问题
    String fileName = new String(file.getName().getBytes("utf-8"),"ISO-8859-1");
    //设置请求头内容,告诉浏览器代开下载窗口
    HttpHeaders headers = new HttpHeaders();
    headers.setContentDispositionFormData("attachment",fileName );
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    return new ResponseEntity<>( FileUtils.readFileToByteArray(file),
            headers, HttpStatus.CREATED);
}

本以为文件下载下来没问题了,但是内容却不一样。

例如一个正常的txt文件,下载下来就是如下内容:

"uvrOqCAwMTM4MDE2OQ0KzfTIqLflIDQ1MTg5Ng0Kwbq3ySAwMTM3NzAyMQ0KwO7S7SAwMTM3Nzk0NA0K0vzUvtDLIDAxMzczMzQ5DQrSpsP3IDAxMzc3ODgyDQrDt7jVIDAxMzc3ODUwDQrQ3LrsIDAxMzgwNzgzDQqzws7AueMgMDEzNzc4NDYNCsHWwPbB4SAwMTM3Nzk1NQ0K"

在网上找了很多方法,发现基本都没说乱码问题,都是文件名乱码。原因也分析得不对。Google了很久终于找到了原因。

原来 appingJacksonHttpMessageConverter 这个文件有问题,配置不对,由于优先级问题,没有调用到正确的方法。具体原因可以参考下面的参考网址。

解决方法,在MVC配置JSON中加入额外的配置

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
    <property name="messageConverters">  
        <list>  
           <!--把ByteArray加在Json前面,下载文件需要,否则文件内容出现乱码-->
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>  
            <bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >  
                <property name = "supportedMediaTypes">  
                    <list>  
                        <value>text/plain;charset=UTF-8</value>  
                    </list>  
                </property>  
            </bean>  
        </list>  
    </property>  
</bean>  

再测试文本和图片都没有问题了。

 

ref.

http://www.iteye.com/topic/1125784

 

欢迎关注我公众号:

 

 

 

发表回复

您的电子邮箱地址不会被公开。

粤ICP备17041560号-2