Как использовать Plug.Upload? - PullRequest
1 голос
/ 23 апреля 2019

Я хотел бы использовать Plug.Upload в одном из моих маршрутизаторов без какой-либо библиотеки или фреймворка сверху, но официальная документация здесь: https://hexdocs.pm/plug/Plug.Upload.html не предоставляет пример в отличие от других плагинов, таких как: Plug.Parsers(https://hexdocs.pm/plug/Plug.Parsers.html).

Может кто-нибудь привести пример?

1 Ответ

2 голосов
/ 23 апреля 2019

Plug.Upload - не плагин, как отметил Алексей в комментариях.Вы не можете добавить его в свой конвейер.Вместо этого :multipart должно быть разрешено в конфигурации Plug.Parsers в вашей endpoint.ex (она есть по умолчанию):

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

Вам потребуется маршрут для обработки запроса POST с загруженным файлом:

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 -> %>

с файловым вводом

<%= file_input f, :photo, class: "form-control" %>

Подробные инструкции приведены в блоге Phoenix Framework .

...