一個很好的使用方式是將文件直接上傳到Amazon s3,然後從該位置將其添加到您的應用程序中並與Carrierwave進行通信。如果您將文件存儲在s3上的臨時存儲桶/位置,則可以使載波有效地處理並移動它。它直接上傳到S3後,並假設你有可用的桶和解決您上傳它,你可以使用這樣的代碼有Carrierwave把它撿起來,對它進行處理,而「動」吧:
def add_file_from_URL(bucket, object_address)
s3 = AWS::S3::new
bucket = s3.buckets[bucket]
object = bucket.objects[object_address]
object_url = object.url_for(:read, :expires => 60*60, :secure => true) #expires in 1 hour
self.remote_attachment_url = object_url.to_s
self.save
object.delete()
end
這段代碼將會在您的模型中包含文件。
我遺漏了處理(調整大小)文件的代碼,因爲如果您尚未完成該部分,您應該能夠輕鬆地在Carrierwave文檔中找到它。
爲了跟蹤文件的元數據,我建議使用:before_save回調函數將這些信息存儲在文件的邊上。你將有一個這樣的方法:
private
def update_file_attributes
if file.present?
self.file_content_type = attachment.file.content_type
self.file_size = attachment.file.size
end
end
在這個例子中,我節省了實際的文件大小,但你可以調整這個維度來代替。這用於保存文件的模型中。