轉(zhuǎn)自:(忘了)
序
作為程序員,可能會在不經(jīng)意間就寫出來了一段讓自己感到驕傲、欣喜、自豪的垃圾代碼。對!就是垃圾代碼,此處不需要引號!這種情況是可悲的,更可悲的是你自己一直無法發(fā)現(xiàn)自己的垃圾之處!我們?nèi)绻氤砷L,想在編程的路上走下去,第一個資本就是要:學(xué)會、習(xí)慣、堅持寫優(yōu)雅的高效的健壯的代碼。這個過程不是一觸而就的,只能在日常的小事中,自己編寫的一段段小的代碼中慢慢改進(jìn)。
原本的寫法
/**
* @Description 下載文件
* @author zhangyd
* @date 2015年12月7日 上午10:34:23
* @param response
* @param file
*/
public static void downLoadFile(HttpServletResponse response, File file) {
if (file == null || !file.exists()) {
return;
}
OutputStream out = null;
try {
response.reset();
response.setContentType("application/octet-stream; charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=" + file.getName());
out = response.getOutputStream();
out.write(FileUtils.readFileToByteArray(file));
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
簡化的寫法
/**
* @Description 下載文件
* @author zhangyd
* @date 2015年12月11日 下午6:11:33
* @param fileName
* @param file
* @return
* @throws IOException
*/
public ResponseEntity<byte[]> download(String fileName, File file) throws IOException {
String dfileName = new String(fileName.getBytes("gb2312"), "iso8859-1");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", dfileName);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
application文件添加配置,這個是配置response的字符編碼的,如果不配置,可能會出現(xiàn)亂碼等一系列問題
<!-- 設(shè)置json和response的字符編碼 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<ref bean="stringHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>