我正在使用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模板?
谢谢!
答案 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)