在开发的过程中碰到一个问题,如下
现在需要做一个mp3文件下载的功能,但是在chrome浏览器下面总是直接播放,不知道怎么解决,求解答?
mp3
附加:有没有相关性的知识,能让我们对文件下载,对web服务输出格式,有个整体的认识?谢谢!
注:本人是学Java的,其它代码可能不怎么看的懂,不过您可以跟我说原理。 不管怎么样,感恩 ^_^
Java
小伙看你根骨奇佳,潜力无限,来学PHP伐。
http://tools.ietf.org/html/rfc2616#section-19.5.1
Content-Disposition 回應標頭欄位已被提議作為來源伺服器在使用者要求將內容儲存到檔案時建議預設檔案名稱的一種方式。
一個例子是:
這裡自己的原文連結:http://zcoder.cn/2015/01/01/下載mp3檔案而不是直接播放/
Web工程師適合看本文,由於本人是做Java的,以下的程式碼都是基於Java的,但我會講基本原理
在瀏覽器中,開啟一個輸出是MP3檔案流的url,要求是直接下載,但有個瀏覽器有自帶的播放功能,會出現瀏覽器直接開啟檔案。
url
rfc2616#section-19.5.1: http://tools.ietf.org/html/rfc2616#section-19.5.1 WIKI: http://en.wikipedia.org/wiki/MIME#Content-Disposition
什麼是Content-Disposition?,Content-disposition 是 MIME 協定的擴展,MIME 協定指示 MIME 使用者代理程式如何顯示附加的文件,Content-disposition可以在使用者下載時指定文件名稱。實際使用中Content-disposition雖然只是能指定名字,但是瀏覽器預設直接下載,而不需要再指定Content-Type;但是如果不指定Content-disposition,直接設定回應頭Content-Type: application/octet-stream也可以下載,但是這種下載沒有指定檔名,用戶下載下來的檔名是請求路徑(Request URL)。
Content-disposition
Content-Type
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="filename.ext"
// 使客户端直接下载 // 响应的格式是: // Content-Type: application/octet-stream response.setContentType("application/octet-stream"); // 为客户端下载指定默认的下载文件名称 // 响应的格式是: // Content-Disposition: attachment;filename="[文件名]" response.setHeader("Content-Disposition", "attachment;filename=\"" + f.getName() + "\"");
這個時候問題就簡單了,我們只要加一個過濾器,對需要請求地址,設定回應頭Content-Type: application/octet-stream,即可。
我在解決這個問題的過程中,發現stackoverflow.com 上面答案很多,但是我使用百度卻只搜到兩條信息,而且寫的都不好,這說明兩個問題:1、百度有的時候不好用,2、國內沒有這樣的環境,即使大家解決問題了,沒有註意積累,沒有分享出來。
下面是 stackoverflow.com 上面的解答,很不錯,分享一下。
http://stackoverflow.com/questions/3401650/stop-mp3-file-from-streaming-in-browsers/3401658#3401658
http://tools.ietf.org/html/rfc2616#section-19.5.1
雷雷下載mp3檔案而不是直接播放
這裡自己的原文連結:http://zcoder.cn/2015/01/01/下載mp3檔案而不是直接播放/
這篇本文適合人群
Web工程師適合看本文,由於本人是做
Java
的,以下的程式碼都是基於Java
的,但我會講基本原理需求
在瀏覽器中,開啟一個輸出是MP3檔案流的
url
,要求是直接下載,但有個瀏覽器有自帶的播放功能,會出現瀏覽器直接開啟檔案。解決方法
Content-Disposition
rfc2616#section-19.5.1: http://tools.ietf.org/html/rfc2616#section-19.5.1
WIKI: http://en.wikipedia.org/wiki/MIME#Content-Disposition
什麼是Content-Disposition?,
Content-disposition
是 MIME 協定的擴展,MIME 協定指示 MIME 使用者代理程式如何顯示附加的文件,Content-disposition
可以在使用者下載時指定文件名稱。實際使用中Content-disposition
雖然只是能指定名字,但是瀏覽器預設直接下載,而不需要再指定Content-Type
;但是如果不指定Content-disposition
,直接設定回應頭Content-Type: application/octet-stream
也可以下載,但是這種下載沒有指定檔名,用戶下載下來的檔名是請求路徑(Request URL)。設定response-header(回應頭)
Java程式碼範例
如果請求路徑是靜態檔案
這個時候問題就簡單了,我們只要加一個過濾器,對需要請求地址,設定回應頭
Content-Type: application/octet-stream
,即可。其他
我在解決這個問題的過程中,發現stackoverflow.com 上面答案很多,但是我使用百度卻只搜到兩條信息,而且寫的都不好,這說明兩個問題:1、百度有的時候不好用,2、國內沒有這樣的環境,即使大家解決問題了,沒有註意積累,沒有分享出來。
下面是 stackoverflow.com 上面的解答,很不錯,分享一下。
http://stackoverflow.com/questions/3401650/stop-mp3-file-from-streaming-in-browsers/3401658#3401658