sci*_*fic 5 ruby-on-rails carrierwave
在我的rails应用程序中,我使用Carrierwave在Amazon S3上上传图像.我想指向现有的Amazon S3图像,而无需重新上传图像.例如,如果我在http://test.s3.amazonaws.com/image/path/0001/image.jpg上有现有的Amazon S3图像,我可以更新图像的路径以指向此图像吗?我不想使用远程上传选项,因为我真的只想使用已经存在的相同图像(但将其保存在我的记录的"路径"属性中).
在控制台中,我尝试过:
image.update_attributes(:path=> "http://test.s3.amazonaws.com/image/path/0001/image.jpg")
Run Code Online (Sandbox Code Playgroud)
但是这无法覆盖图像的路径.
插话,迟到总比不到好!注意:这是针对 Rails 4 的,我目前仅在 Rails 4.1 上进行测试。
我认为这比应有的更难!这对我来说至关重要,因为我要附加 100MB 以上的 MP3 文件,但由于 CloudFlare SSL 限制(和常识),我无法在我的主机上接收这些文件。幸运的是,AWS 支持预授权上传,我让 Carrierwave 为我做正确的事情:
第 1 步:让 Carrierwave 告诉我它将在哪里存储文件(如果可以的话):
m.raw_write_attribute('file','file.mp3');
url = m.file.url
signed = aws_presigned_url(url)
Run Code Online (Sandbox Code Playgroud)
raw_write_attribute
不保存任何内容,它只是在设置值时绕过载波。这使得对象的行为就像从数据库中读取“file.mp3”一样。然后您可以询问 Carrierwave“文件所在的位置”。然后,我将文件直接从客户端上传到 S3。完成后,我对 Rails 进行另一个 API 调用,该调用执行以下代码:
m.raw_write_attribute('file','file.mp3');
m.update_attribute('file','file.mp3');
Run Code Online (Sandbox Code Playgroud)
这两对搭档绕过了Carrierwave。第一个使 Carrierwave 认为“文件”列设置为“file.mp3”,第二个明确告诉 Rails 将“file.mp3”保留到数据库。由于raw_write_attribute
呼叫的原因,Carrierwave 允许第二次通过不变。
小智 1
我发现你实际上可以这样做,例如如果你mount_uploader
是:path
,那么:
image.remote_path_url = "http://test.s3.amazonaws.com/image/path/0001/image.jpg"
image.save
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1959 次 |
最近记录: |