在开发的过程中碰到一个问题,如下
现在需要做一个mp3文件下载的功能,但是在chrome浏览器下面总是直接播放,不知道怎么解决,求解答?
mp3
附加:有没有相关性的知识,能让我们对文件下载,对web服务输出格式,有个整体的认识?谢谢!
注:本人是学Java的,其它代码可能不怎么看的懂,不过您可以跟我说原理。 不管怎么样,感恩 ^_^
Java
小伙看你根骨奇佳,潜力无限,来学PHP伐。
http://tools.ietf.org/html/rfc2616#section-19.5.1
The Content-Disposition response-header field has been proposed as a means for the origin server to suggest a default filename if the user requests that the content is saved to a file.
An example is:
Content-Disposition: attachment; filename="fname.ext"
这里自己的原文链接: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