views:

115

answers:

1

I have an mp3 on an apache server. I want it to be downloaded as a file when a user visits the link. Instead quicktime, or google chromes media player will try and stream it.

Is there a fix for this with headers? Or is the only option so 'right click save as'?

Edit Here is my header. Safari has stopped streaming, but chrome contines to do it. Chrome seems to be ignoring this:

I can see the header has been changed correctly:

Date    Wed, 04 Aug 2010 00:14:35 GMT
Server  Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.11
Last-Modified   Tue, 03 Aug 2010 04:37:01 GMT
Etag    "2bbd692-79597d-48ce3de3f5540"
Accept-Ranges   bytes
Content-Length  7952765
Content-Disposition attachment
Keep-Alive  timeout=5, max=100
Connection  Keep-Alive
Content-Type    audio/mpeg

Is there anything else in the header that would cause this?

Edit Doing some research I found this: http://www.google.com/support/forum/p/Chrome/thread?tid=76de4f53f43f03d3&hl=en Looks like there might be a bug in chrome preventing it from downloading.

+5  A: 

You want to set the Content-Disposition response header to "attachment", and probably the "filename" field as well.

Example:

Content-Disposition: attachment; filename=foo.mp3;

To accomplish this directly in Apache, try putting the following in your httpd.conf or .htaccess file:

<FilesMatch "\.(?i:mp3)$">
  ForceType audio/mpeg
  SetEnvIf Request_URI "^.*/?([^/]*)$" FILENAME=$1
  Header set Content-Disposition "attachment; filename=%{FILENAME}e"
  UnsetEnv FILENAME
</FilesMatch>

EDIT:

Added filename field to Apache configuration example, borrowed from this answer. You should be aware, however, of potential problems caused by filenames with non-US-ASCII characters in them: see this question.

Alternatively, you could use a generic constant filename (since you know the extension already) like song.mp3, but this might not be an option depending on your circumstances.

A third option would be to create a script to serve these MP3s, which can set the header and take care of stripping unwanted characters out of the filename.

Cameron
Thank you for pointing me in the right direction. I found this article on how to force downloads http://www.thingy-ma-jig.co.uk/blog/06-08-2007/force-a-pdf-to-download
Keyo
http://www.jtricks.com/bits/content_disposition.html
NullUserException
Chrome is ignoring this, don't know why. Pasted the header above.
Keyo
@Keyo: Hmm... Try replacing the `audio/mpeg` mime type with `application/octet-stream`
Cameron
Did't work, I think it might be a bug in chrome.
Keyo
I looked up the header support on this page. http://greenbytes.de/tech/tc2231/#attwithfilenameandextparamLooks like I need to include filename and ext. Do you know how to set these from .htaccess?
Keyo
OK, see my edit
Cameron
Thanks for that, but the filename comes up blank in the header. I only have on file I will make it static.
Keyo
No luck with chrome, giving up. Thing is fubar.
Keyo