網上找了,百度了幾種方式, 總結一下,下面這種,我認爲是比較好的。前端
固然能夠 使用springMVC 的 那種簡潔方式,但是不夠原生,看起來不容易明白。nginx
因此下面這樣的方式 就比較 簡潔,而又容易理解,解決原生。spring
//下載績效操做手冊
@RequestMapping("/down/pfmceplan.do")
public String downPfmceplan(HttpServletRequest request,HttpServletResponse response) throws Exception{
String fileName="績效操做shouceV1.0.zip";
//解決中文丟失問題
String fileNameHeader=new String(fileName.getBytes(), "ISO-8859-1");
response.reset();
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream; charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="
+ fileNameHeader);
String path = Thread.currentThread().getContextClassLoader()
.getResource("").getPath();
// 求出 根項目的路徑
String pathRealroot=path.substring(0, path.lastIndexOf("WEB-INF"))+"assets/"+"download/";
File downPath=new File(pathRealroot
+File.separator + fileName);
System.out.println("=================>>>>>>>>>>>>>>>"+downPath);
OutputStream os = response.getOutputStream();apache
// FileUtils 來自 apache 的開源 common包tomcat
// org.apache.commons.io.FileUtils 引入 該包調該方法便可服務器
os.write(FileUtils.readFileToByteArray(downPath));
os.flush();
os.close();
return null;
}app
這裏的文件是固定死了, 同理 若是是 前端 傳過來也是同樣的道理。 圖片
要求不高的 文件下載,能夠 在springMVC 中,將其設置爲 靜態文件,相似 image 圖片,js的同樣,過濾權限,能夠直接訪問,便可實現下載了,這裏不對其說明。ip
可是這樣的方式,訪問的時候該文件名就不能帶有中文的。utf-8
若是須要帶中文 能夠在 服務器裏面 tomcat 或者 nginx 配置一下 請求的字符集,
好比 tomcat的
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="utf-8"
redirectPort="8443" />
這樣 就能夠 支持 包含中文名稱的文件名稱 下載了 。