【发布时间】:2016-02-25 14:18:04
【问题描述】:
我正在尝试使用 phoenix 框架测试需要文件上传的控制器。我遵循了 phoenix guides (http://www.phoenixframework.org/docs/file-uploads) 上的指南,它可以在浏览器中运行,但我在为它编写测试时遇到了麻烦。这是我所做的:
test "POST photo" do
{ :ok, raw_file } = File.read "1528_27.jpg"
conn() |> post("/api/v1/originals", %{ :image => raw_file })
# do some assertions
end
问题是,在控制器中,我的文件永远不会以%Plug.Upload 结构结束,而是以二进制形式结束。所以在测试时,我在控制器中的参数看起来像:
params: %{"image" => <<255, 216, 255, 225, 18, 180, 69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 10, 0, 15, 1, 2, 0, 26, 0, 0, 0, 134, 0, 0, 0, 16, 1, 2, 0, 10, 0, ...>>},
我的控制器在尝试访问 params["image"].path 时发生故障。不过,这在从浏览器上传时有效,因为那时我的参数中有预期的上传结构:
params: %{
"image" => %Plug.Upload{
content_type: "image/jpeg",
filename: "1528_27.jpg",
path: "/var/folders/98/40k7dt2d2sxf6xnkc_627lqc0000gp/T//plug-1448/multipart-280987-612081-2"
}
},
我怎样才能post 来自测试的文件,所以我得到一个%Plug.Upload 结构,而不仅仅是二进制?
【问题讨论】:
-
我认为其中之一是问题中链接到的文档@screnig 的当前位置:phoenixframework.readme.io/docs/file-uploadsphoenixframework.org/blog/file-uploads
-
如果有人想有一个简单的项目在凤凰城上传文件yodiw.com/simple-upload-file-local-phoenix-elixir