如何复制 arc_ecto 上传

How to duplicate an arc_ecto upload

我的Phoenix app的一个模型有一个标志,使用arc_ecto并上传到S3。

我正在复制其中一张记录,我希望它与徽标具有相同的图像。

在我的变更集中我有:

|> cast_attachments(params, [:logo])

原始项目的徽标值为:

iex(21)> MyRepo.get(MyModel, 1).logo
%{file_name: "mylogo.png",
updated_at: #Ecto.DateTime<2017-09-12 12:31:58>}

但是,如果我尝试直接设置它,则会出现错误(Arc.File.new 不接受该结构,这是有道理的)。

我也试过提取原logo的S3url。这没有 return 错误,但也没有添加徽标:

iex(22)> MyRepo.get(MyModel, 2).logo
nil

处理这种情况的正确方法是什么?有什么提示吗?

我设法解决了这个问题,但缺少 2 个东西:

1 - 需要将 allow_paths: true 添加到 cast_attachments

|> cast_attachments(params, [:logo], allow_paths: true)

2 - 我在上传器上有这个:

def storage_dir(_version, {_file, my_model}) do
  "/my_models/#{my_model.id}/logo/"
end

所以我是用id来设置存储路径的。当我复制元素时,我仍然没有 ID,因此路线不正确。我将重复元素的插入和徽标的更新分为 2 个步骤。