Rails 关于文件被下载下来时的文件名:)

douya0808 · 2012年04月17日 · 最后由 huacnlee 回复于 2012年04月18日 · 7606 次阅读

(1)假设有一文件名为 Oracle.zip (2)上传到服务器为避免重名,被重命名为 2111042012-04-16 09.zip (3)用 send_file 下载的时候提供的名字也需要是 2111042012-04-16 09.zip 此时,点击下载显示的是:您想打开或保存此文件吗?名称:2111042012-04-16 09.zip

但是下载时我想显示 Oracle.zip,也就是文件最初的名字 (数据库有对各文件最初的名字进行保存),前辈们有什么建议吗?:)

另外为了做到这一点,你肯定要找个地方保存 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,否则会显示乱码

"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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号