(1)假设有一文件名为 Oracle.zip (2)上传到服务器为避免重名,被重命名为 2111042012-04-16 09.zip (3)用 send_file 下载的时候提供的名字也需要是 2111042012-04-16 09.zip 此时,点击下载显示的是:您想打开或保存此文件吗?名称:2111042012-04-16 09.zip
但是下载时我想显示 Oracle.zip,也就是文件最初的名字 (数据库有对各文件最初的名字进行保存),前辈们有什么建议吗?:)
http://guides.rubyonrails.org/action_controller_overview.html#sending-files 请看这里
另外为了做到这一点,你肯定要找个地方保存 Oracle.zip 这个文件名字符串的,比如用数据库
@edokeh 嗯那 我有保存 但是我用的 send_file 保存了也用不上 您的网址中用的 send_data 这个标签 嘿嘿 我去研究下 多谢指点
试试在 Header 里添加 "Content-Disposition" 值为 "attachment; filename=oracle.zip"
@edokeh 这个好用了 嘿嘿嘿 只要在:filename 给定我的数据库参数下载时的就会显示原文件名了 但是:disposition 这个参数无论我填 inline 还是 attachment 在下载 html 文件类型的时候都会给我显示在当前页而不是以附件形式下载 这个问题您遇到过吗:)
#5 楼 @douya0808 这个好像遇到过,貌似 html、txt 之类的设置 Disposition 是没用的,原因不清楚 另外 filename 有中文的话,好像要转码成 GBK,否则会显示乱码
@edokeh 多谢:)
"Content-Disposition: attachment; filename=oracle.zip" 如果文件名中有中文的话 IE 要单独处理一下
下载 html 文件类型的东西不是需要设置 response 的 ContentType 来着么
如果是一个远程的文件的话,可以这样
def download attachment = Attachment.find(params[:id]) response.headers['Content-Type'] = "application/octet-stream" response.headers['Content-Disposition'] = "attachment; filename=#{attachment.name}" response.headers['Cache-Control'] = "private" response.headers['X-Accel-Redirect'] = attachment.file.url render :nothing => true end