使用Paperclip在S3存储桶之间传输部分(而非全部)文件

3
我有一个托管在Heroku上的应用程序,使用Paperclip将用户照片存储在Amazon S3上。
我想基于一些内部逻辑(该应用程序是多租户的,我正在将AWS文件存储和我的Postgres DB分别放置在不同的租户/模式中),将一些(而不是全部)文件移动到新的存储桶中。

enter image description here

我有两个选项正在考虑中(上面画出)

选项1-使用AWS Cli直接在桶之间移动文件

这个选项是AWS原生的,但它有一个缺点,就是必须担心每个文件的整个文件夹结构(缩略图等)。移动一个文件涉及到移动文件的各种样式-原始大小、中等大小、缩略图等等,因此它不像复制1个文件那样简单。

它还将所有内容与新桶一模一样地复制到相同的文件夹/ id结构中,我希望避免这种情况,因为当我在postgres DB中迁移它们时,用户对应的DB信息(例如id)将会更改

选项2-使用纸夹将每个文件拉到本地并重新上传

这是一个有吸引力的选择,因为它让纸夹处理所有工作。

然而,纸夹使用存储桶名称来构建文件的URL。我需要它从1个桶中提取并推送到另一个桶中。是否有一种方法可以为每个事务单独设置bucket名称?

1个回答

1
Paperclip使用存储桶名称构建远程文件的URL,但这些目录和文件的名称不依赖于存储桶名称。如果您的文件或目录包含存储桶名称,则操作有误,您应该先修复它。
请按照以下步骤操作:
1. 使用命令aws s3 sync OLD_BUCKET_URL public/systempublic/system目录与oldbucket同步。 2. 使用Ruby脚本在本地更改目录和文件,并使用Paperclip进行处理。 3. 使用命令aws s3 sync public/system NEW_BUCKET_URLpublic/system目录与newbucket同步(上传)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接