Add a Content-Disposition header:
Content-Disposition: attachment; filename="foo.mp3"
-pete
Add a Content-Disposition header:
Content-Disposition: attachment; filename="foo.mp3"
-pete
Add a Content-Disposition header:
Content-Disposition: attachment; filename="foo.mp3"
-pete
Check out the send_file method, this will do it for you.
You then create a controller to handle the presentation of the file. Below is an example, if its an image render inline, if not, then force a download. I'm using this with the attachment_fu plugin, which gives me methods like image? to show whether or not its an image. But, you could do something else. Basically, you send the full path to the file to the send_file method. You should then send the correct content-type and specify that the disposition is 'attachment'
class ViewFileController < ApplicationController
# GET /assets/1 def show @asset = Asset.find(params[:id]) if @asset.image? inline else attachment end rescue ActiveRecord::RecordNotFound render :text => "return a file not found error here" end
private def attachment send_file(@asset.full_filename, :filename => @asset.filename, :type => @asset.content_type, :disposition => 'attachment', :streaming => true, :buffer_size => 4096) end
def inline send_file(@asset.full_filename, :filename => @asset.filename, :type => @asset.content_type, :disposition => 'inline') end
end