Ruby on rails 3 使用CarrierWave上传文件到S3,不带模型,可以吗?
CarrierWave有惊人的文档,直到你需要在没有模型的情况下完成它 我已经设置了上传器和fog设置,当在模型上使用安装的上传器时,它们都可以正常工作,但现在我想在没有模型的情况下这样做 我有这个:Ruby on rails 3 使用CarrierWave上传文件到S3,不带模型,可以吗?,ruby-on-rails-3,amazon-s3,carrierwave,fog,Ruby On Rails 3,Amazon S3,Carrierwave,Fog,CarrierWave有惊人的文档,直到你需要在没有模型的情况下完成它 我已经设置了上传器和fog设置,当在模型上使用安装的上传器时,它们都可以正常工作,但现在我想在没有模型的情况下这样做 我有这个: uploader = CsvUploader.new something = uploader.store!(File.read(file_path)) uploader.retrieve_from_store!(self.file_name) 当我打电话的时候。商店!代码立即运行,这很奇
uploader = CsvUploader.new
something = uploader.store!(File.read(file_path))
uploader.retrieve_from_store!(self.file_name)
当我打电话的时候。商店!代码立即运行,这很奇怪,因为上传文件需要几秒钟
然后在我打电话之后。从商店取回你!uploader对象具有所有正确的S3信息,比如完整的URL和其他内容
然而,呼吁:
uploader.file.exists?
返回false。浏览S3URL会从s3返回一个key not found错误
那么,我做错了什么??重申一下,它在安装时工作,所以我不认为这是我的雾设置
我的上传者:
class CsvUploader < CarrierWave::Uploader::Base
# Choose what kind of storage to use for this uploader:
storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
include CarrierWave::MimeTypes
process :set_content_type
def store_dir
"uploads/public/extranet_csvs"
end
def cache_dir
"/tmp/uploads"
end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
def extension_white_list
%w(csv)
end
end
类CsvUploader文件。打开而不是文件。阅读。后者返回一个原始字符串,CarrierWave不知道如何存储该字符串
uploader = CsvUploader.new
File.open(file_path) do |file|
something = uploader.store!(file)
end
uploader.retrieve_from_store!(self.file_name)
这可能在文档中更清楚,但我通过检查文档确认了这一点。很遗憾CarrierWave在这里默默失败。回答得很好,谢谢!只要提醒一下使用此代码的人,调用File.open(File\u path)
这样会在存储文件后使其保持打开状态。要让Ruby为您关闭它,请使用File.open(File|path){| File | something=uploader.store!(File)}
我不需要从商店中检索行,我只是使用uploader.url
获取我文件的url。当我们执行uploader.store时!(文件)它尝试查找store_dir,在该方法中,我需要导出依赖于模型对象的account_id。但在本例中,模型对象为零。那么,在存储文件时有没有方法传递该ID?