首页 > 解决方案 > 使用 Phoenix 从 ARC 上传读取二进制数据 -- db 仅显示文件名

问题描述

当我阅读我的用户时,我看到

%MyApp.Api.user{
 profile_photo: %{
    file_name: "2018-12-28 15:46:53.330536Z.png",
    updated_at: ~N[2018-12-28 15:46:53]
  },
}

但是在上传时我使用这个变更集:

  def update_photo_changeset(user, attrs) do
    user
    |> cast(attrs[:user], [:profile_photo])
    |> cast_attachments(attrs, [:profile_photo])
    |> validate_required([:email, profile_photo])
  end

记录 attrs 我可以看到二进制文件和文件名。当我阅读时,我只看到文件名。

如何直接读取二进制数据?

标签: elixirphoenix-frameworkarc-ecto

解决方案


Arc.File是一个具有三个字段的结构。

Algebra.Inspect,用于在控制台中表示文件,谨慎地忽略二进制垃圾。

%MyApp.Api.User{}.profile_photo应该不是地图,而是%Arc.File{}结构,我怀疑我能说出为什么它是一张光秃秃的地图。

在任何情况下,结构都有一个可直接访问的字段binary

%MyApp.Api.User{}.profile_photo.binary

推荐阅读