2017-08-09 106 views
0

我使用神龛进行excel文件上传。文件已成功上传并链接到使用神社的模型实例。Rails5:在浏览器中打开excel文件

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

从大多数人的推荐的解决方案是使用“SEND_DATA”,我试图用也:

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

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

我的问题是

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

2)哪一个更好?要在浏览器中打开文件,或者使用'axlsx'之类的宝石来创建和渲染应用中的Excel模板?

谢谢!

回答

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上,你可以指定Shrine::Storage::S3初始化默认:content_disposition上传选项:

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