如何使用Plug.Upload?

时间:2019-04-23 13:15:07

标签: elixir

我想在我的一台路由器中使用Plug.Upload,而顶部没有任何库或框架,但此处的官方文档:https://hexdocs.pm/plug/Plug.Upload.html没有提供与其他插件不同的示例,例如:{{ 1}}(https://hexdocs.pm/plug/Plug.Parsers.html)。

有人可以举个例子吗?

1 个答案:

答案 0 :(得分:2)

正如Aleksei在评论中提到的,

Plug.Upload不是插件。您不能将其添加到管道中。相反,应该在您的:multipart的{​​{1}}配置中允许Plug.Parsers(默认情况下在此位置):

endpoint.ex

您需要一条路由来处理上传的文件中的POST请求:

plug Plug.Parsers,
  parsers: [:urlencoded, :multipart, :json],
  pass: ["*/*"],
  json_decoder: Phoenix.json_library()

相应的控制器动作将在其参数之一内获得一个post "/upload_photo", UploadController, :photo 结构:

Plug.Upload

对于测试,您可以添加一个页面,该页面的表单带有def photo(conn, %{"upload" => upload}) do IO.inspect upload.photo, label: "Photo upload information" # TODO: you can copy the uploaded file now, # because it gets deleted after this request json(conn, "Uploaded #{upload.photo.filename} to a temporary directory") end

multipart: true

具有文件输入

<%= form_for @conn, "/upload_photo", [as: :upload, multipart: true], fn f -> %>

Phoenix framework blog中提供了详细说明。