我正在使用Delayed Paperclip和直接上传到S3。我的模型名为
使用JavaScript从照片表单上传图像到S3。文件存储在Paperclip期望原始图像位于的位置,并将文件详细信息保存到隐藏字段中。提交表单时,这些属性被写入Photo模型:
image_file_name image_file_size image_content_type 因为仅编写这些属性似乎不足以触发Delayed Paperclip处理图像,所以在
问题是,在
为什么Paperclip需要将文件复制下来再上传回去?
Photo
,其附件为image
。使用JavaScript从照片表单上传图像到S3。文件存储在Paperclip期望原始图像位于的位置,并将文件详细信息保存到隐藏字段中。提交表单时,这些属性被写入Photo模型:
image_file_name image_file_size image_content_type 因为仅编写这些属性似乎不足以触发Delayed Paperclip处理图像,所以在
Photo.save
之后,我调用Photo.image.reprocess!
,这确实使Delayed Paperclip创建了一个新的Sidekiq作业,成功地处理了图像。问题是,在
PhotosController
中调用Photo.save
时,文件会从S3复制到临时目录,然后再返回到S3。这发生在作业之外并且是阻塞的。[paperclip] copying image_assets/grab-original.tiff to local file /var/folders/bv/x495g9g10m7119680c9ssqmr0000gn/T/94943834d26bcb8b471f4eeb2a7f899d20141125-3895-1oqom7l
[AWS S3 200 2.601589 0 retries] get_object(:bucket_name=>"example-com-development",:key=>"image_assets/grab-original.tiff")
[paperclip] saving image_assets/grab-original.tiff
[AWS S3 200 2.47114 0 retries] put_object(:acl=>:public_read,:bucket_name=>"example-com-development",:cache_control=>"max-age=29030400",:content_length=>534472,:content_type=>"image/tiff",:data=>Paperclip::AttachmentAdapter: grab.tiff,:key=>"image_assets/grab-original.tiff")
为什么Paperclip需要将文件复制下来再上传回去?