【问题标题】:Rails5: Open excel file in browserRails5:在浏览器中打开 excel 文件
【发布时间】:2017-09-13 05:31:51
【问题描述】:

我正在使用神社进行 excel 文件上传。文件已成功上传并使用神社链接到模型实例。

我想在浏览器中打开该 Excel 文件(.xls、.xlsx)而不是下载它。我已经寻找了各种解决方案并尝试了它们,但没有运气。

大多数人推荐的解决方案是使用“send_data”,我也尝试过:

send_file(data, type: 'application/vnd.ms-excel', filename: "#{uploaded_file.metadata["filename"]}", disposition: 'inline')

但它正在下载文件而不是直接在浏览器中打开它。

我的问题是

1) 这个打开/下载文件是否取决于浏览器设置?

2) 哪个更好?要在浏览器中打开文件或使用“axlsx”之类的 gem 在应用程序中创建和呈现 excel 模板?

谢谢!

【问题讨论】:

    标签: ruby-on-rails excel file ruby-on-rails-5


    【解决方案1】:

    浏览器会尝试在浏览器中打开文件还是下载文件由Content-Disposition响应头决定。

    Content-Disposition: inline     # browser will attempt to display it
    Content-Disposition: attachment # browser will always download it
    

    如果用户选择下载,您也可以在这两种情况下指定文件名:

    Content-Disposition: inline; filename="table.xls"
    Content-Disposition: attachment; filename="table.xls"
    

    如何确保将Content-Disposition 指定为inline 取决于您存储文件的位置。如果您将它们存储在文件系统上,我认为 Rails::Static 中间件已经具有“内联”行为。如果没有,你可以切换到download_endpoint

    如果您将它们存储在 Amazon S3 上,您可以在 Shrine::Storage::S3 初始化时指定默认的 :content_disposition 上传选项:

    Shrine::Storage::S3.new(upload_options: {content_disposition: "inline"}, **options)
    

    【讨论】: