Changeset.cast上的Plug.Upload失败...仅在Windows上

时间:2017-06-17 17:06:16

标签: elixir ecto arc-ecto

在我的应用中,用户可以“导入”照片,服务器将图像下载到本地文件系统,将结果放入Plug.Upload,并在存储db的路径之前使用Arc.Ecto执行一些操作。这在Debian中运行得很好,但在我的Windows 10机器上的Ecto.Changeset.cast期间失败了。

File.mkdir("/tmp/import/")
filename = UUID.uuid4() <> "." <> extension
path = "/tmp/import/" <> filename
File.write!(path, imgbinary)
results
|> Map.put("photourl",%Plug.Upload{filename: filename, path: Path.absname(path)})
|> do_stuff_and_then_get_passed_to_changeset

这是我给予Changeset.cast(在Windows中)

中的部分参数
"photourl" => %Plug.Upload{content_type: nil,
   filename: "17c032be-0237-4981-a9e5-1cfe693aed51.jpg",
   path: "c:/tmp/import/17c032be-0237-4981-a9e5-1cfe693aed51.jpg"},

unix-equivalent(没问题):

"photourl" => %Plug.Upload{content_type: nil,
   filename: "17c032be-0237-4981-a9e5-1cfe693aed51.jpg",
   path: "/tmp/import/17c032be-0237-4981-a9e5-1cfe693aed51.jpg"},

我的架构的一部分:

 field :photourl, ImageUploader.Type
 #(photourl is stored as text in postgres db)

变更集的错误部分:

  

错误:[photourl:{“无效”,       [type:ImageUploader.Type,validation :: cast]}]

defmodule ImageUploader do
  use Arc.Definition
  use Arc.Ecto.Definition

  def __storage, do: Arc.Storage.Local
  #other stuff that isn't relevant. I think Type comes from Arc or Arc.Ecto?

我不太清楚如何进一步调试它。我想知道它是否与我的路径有关(但它对两种环境都有效,并且文件存在)。

0 个答案:

没有答案