我正在构建一个 Rails 应用程序,它允许用户直接在浏览器中访问某些上传的文件,但与实际文件的 URL 不同。这样可以通过强制登录来保护文件。
因此,例如,您可以访问以下位置的文件:domain.com/file/19371da
过去,我通过使用 CarrierWave 完成此操作,然后to_blob
对文件本身进行操作,然后使用send_data
和使用数据库中存储的有关文件的数据将其发送回:
send_data @file.file.to_blob, stream: false, filename: @file.name, type: @file.mime_type, disposition: 'inline'
然而,当使用新的 Active Storage 作为 CarrierWave 的潜在替代品时,我在将实际文件本身作为 blob 传递给该send_data
方法时遇到了困难。
例如
send_data @file.file.to_blob, stream: false, filename: @file.file.blob.filename, type: @user.file.blob.content_type, disposition: 'inline'
它给出了一个错误undefined method 'to_blob' for #<ActiveStorage::Attached::One:0x007f8f23ca2718>
。
如何在 Active Storage 中将实际文件作为 blob 获取?