SpringMVC的下载功能

463 阅读1分钟

SpringMVC的下载功能正常是很简单,但是因为昨天项目配置了JSON的数据传输,导致我的下载功能,一直出错,能正常运行,但是下载的图片都是被破坏了,无法查看,当时纠结了好久,一直不知道问题出在哪里。

程序

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("download")
public class UploadController {

    @RequestMapping("down")
    @ResponseBody
    public ResponseEntity<byte[]> download(){
    	String path="E:/temp/";
    	String filename="31.jpg";
    	File file = new File(path+filename);
    	HttpHeaders headers = new HttpHeaders();
    	String downloadFileName = "default.jpg";
    	try {
    		//防止中文乱码
    		downloadFileName = new
    		    String(filename.getBytes("UTF-8"),"ISO-8859-1");
    	} catch (UnsupportedEncodingException e) {
    		e.printStackTrace();
    	}
    	//通知浏览器以attachment(下载方式)打开图片
    	headers.setContentDispositionFormData("attachment"
    	                , downloadFileName);
    	//application/octet-stream 二进制流数据
    	headers.setContentType(MediaType
    	            .APPLICATION_OCTET_STREAM);
    	
    	try {
    		return new ResponseEntity<byte[]>
    		   (FileUtils.readFileToByteArray(file),headers,HttpStatus.OK);
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
    	return null;
    }
}	

正常上面的代码就可以实现SpringMVC的下载功能,不过因为配置JSON的传输数据格式,导致下载错误,需要配置一下才能正常。

配置

<bean id="mappingJacksonHttpMessageConverter"
    class="org.springframework.http.converter.json
        .MappingJackson2HttpMessageConverter">
    <property name="supportedMediaTypes">
        <list>
            <value>text/plain;charset=UTF-8</value>  
            <value>application/json;charset=UTF-8</value>
        </list>
    </property>
</bean>

 <bean id="byteArrayHttpMessageConverter"
     class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> 
     
<bean class="org.springframework.web.servlet.mvc
            .method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list >
            <ref bean="mappingJacksonHttpMessageConverter" />
            <ref bean="byteArrayHttpMessageConverter" />
        </list>
    </property>
</bean>

以上配置即可正常运行。