如何复制 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 个步骤。
我的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 个步骤。