在我的应用中,用户可以“导入”照片,服务器将图像下载到本地文件系统,将结果放入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?
我不太清楚如何进一步调试它。我想知道它是否与我的路径有关(但它对两种环境都有效,并且文件存在)。