这让我发疯了。我将 CarrierWave 与 Amazon S3 一起使用,我可以安全地将文件上传到存储桶,并且我现在尝试(在不同的请求中)检索文件并将其作为下载文件传送到浏览器。
这些文件可以是任何东西,.zip 文件等。我不使用它来存储图像。
Bucket 是私有的,不是公共的,所以我不能只使用 S3 URL。
这是我的检索代码:
au = @note.attachment
au.retrieve_from_store!(File.basename(@note.attachment.to_s))
au.cache_stored_file!
cache_stored_file 上的代码错误!线。抛出错误:
undefined method `body' for nil:NilClass
我检查了该对象,它对我来说看起来不错,如果我输出 @note.attachment,我可以清楚地看到带有键等的 amazon s3 URL。
我一直在网上,我可以弄清楚。我发现有少数人有同样的问题,他们通过做与我的案例无关的事情来解决这个问题(比如使用一些 imagemagick 方法),同样,这些只是文件。
没有处理或图像工作,我只想将文件作为下载返回给浏览器。
有人可以帮忙吗?
这是我的上传者:
class AttachmentUploader < CarrierWave::Uploader::Base
storage :fog
def store_dir
"#{Rails.env}/#{model.id}"
end
def cache_dir
"#{Rails.root}/tmp/attachments"
end
end
和痕迹
carrierwave (0.8.0) lib/carrierwave/storage/fog.rb:225:in `read'
carrierwave (0.8.0) lib/carrierwave/uploader/cache.rb:77:in `sanitized_file'
carrierwave (0.8.0) lib/carrierwave/uploader/cache.rb:116:in `cache!'
carrierwave (0.8.0) lib/carrierwave/uploader/cache.rb:73:in `cache_stored_file!'