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>
以上配置即可正常运行。