現在的瀏覽器能夠識別很多文件類型(txt,pdf,jpg...),并在瀏覽器中自動打開
情況一:
添加頭信息Content-Disposition "attachment;"會使瀏覽器強制下載:
#表示瀏覽器內嵌顯示一個文件
Content-disposition: inline; filename=foobar.pdf
#表示會下載文件,如火狐瀏覽器中
Content-disposition: attachment; filename=foobar.pdf
nginx配置如下,在相應的server中添加如下location:
location /upload {
add_header Content-Disposition "attachment;";
}
情況二:
有這么一個需求,對于圖片文件和pdf等文件鏈接,只要訪問實在某個路徑下,不能在瀏覽器中打開圖片,而是提示用戶保存到本地,文件名使用訪問的文件名。
這個問題主要是IE造成的,不管mime類型是什么,比如人工把圖片的mime類型設置為octet-stream,如果瀏覽器認識文件后綴的話,仍然會在瀏覽器中打開圖片,IE瀏覽器夠垃圾的吧?
解決方案:
在響應的http頭添加:Content-Disposition: attachment; filename=文件名
nginx配置如下:
location ~ ^/somepath/(.*)$ {
add_header Content-Disposition "attachment; filename=$1";
alias "E:/apache-tomcat-7.0.32/webapps/upload/$1";
}
這里使用到了正則表達式,捕獲請求的文件名。
另外,需要注意nginx的location優先級,首先是=,然后是^~,最后才是~。
這樣,IE瀏覽器就會忽略掉原mime類型,提示用戶把文件保存到本地。