传统代码:
@RequestMapping("file/download")
public void fileDownload(HttpServletResponse response, HttpServletRequest request) {
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
String path = request.getServletContext().getRealPath("static/style.css");
response.setHeader("Content-Disposition", "attachment;fileName=style.css");
InputStream inputStream = null;
OutputStream outputStream = null;
try {
File file = new File(path);
inputStream = new FileInputStream(file);
outputStream = response.getOutputStream();
byte[] b = new byte[1024];
int length;
while ((length = inputStream.read(b)) > 0) {
outputStream.write(b, 0, length);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (outputStream != null) outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
既然用了Spring Mvc 就不应该出现j2ee的reponse的接口代码
java:
@RequestMapping("download")
public ResponseEntity<byte[]> download() throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "upload.zip");
File file = new File("d://upload.zip");
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
xml:
<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>