首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Plug.Upload?

如何使用Plug.Upload?
EN

Stack Overflow用户
提问于 2019-04-23 21:15:07
回答 1查看 2.2K关注 0票数 7

我想在我的一个路由器上使用Plug.Upload,上面没有任何库或框架,但是官方文档:https://hexdocs.pm/plug/Plug.Upload.html并没有提供一个示例,这与其他插件不同,比如:Plug.Parsers (https://hexdocs.pm/plug/Plug.Parsers.html)。

谁能举个例子?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-23 23:41:26

正如阿列克谢在评论中提到的那样,Plug.Upload并不是一个插头。您不能将其添加到您的管道中。相反,应该在endpoint.exPlug.Parsers配置中允许:multipart (默认情况下它就在那里):

代码语言:javascript
复制
plug Plug.Parsers,
  parsers: [:urlencoded, :multipart, :json],
  pass: ["*/*"],
  json_decoder: Phoenix.json_library()

你需要一个路由来处理上传文件的POST请求:

代码语言:javascript
复制
post "/upload_photo", UploadController, :photo

相应的控制器操作将在其参数之一中获得一个Plug.Upload结构:

代码语言:javascript
复制
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的表单的页面

代码语言:javascript
复制
<%= form_for @conn, "/upload_photo", [as: :upload, multipart: true], fn f -> %>

,它有一个文件输入。

代码语言:javascript
复制
<%= file_input f, :photo, class: "form-control" %>

Phoenix framework docs中提供了详细的说明。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55812112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档