Rails5:在浏览器中打开excel文件

时间:2017-08-09 05:41:20

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

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

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

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

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

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

我的问题是

1)此开放/下载文件是否取决于浏览器设置?

2)哪一个更好?要在浏览器中打开文件,还是使用像'axlsx'这样的gem在app中创建和渲染Excel模板?

谢谢!

1 个答案:

答案 0 :(得分:0)

浏览器是否会尝试在浏览器中打开文件或下载文件取决于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上,您可以在:content_disposition初始化时指定默认的Shrine::Storage::S3上传选项:

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