传统代码:
@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>