Как загрузить большой файл из формы в Phoenix?

У меня есть форма HTML с полем файла, которое используется для загрузки файла на маршрут /file в моем приложении Phoenix.

Я имитирую это поведение из командной строки с curl -v -F "[email protected]" http://localhost:4000/file/ для более быстрого тестирования.

Когда я использую большой файл (точка поворота кажется около 7.7MB), я получаю следующее исключение от Plug:

18: 40: 38.897 [error] Ошибка в процессе < 0.420.0 > с выходом: {[{reason, # {' exception' = > true, ' struct '= > ' Elixir.Plug.Parsers.RequestTooLargeError ", сообщение = > ноль}}, {MFA, { 'Elixir.Plug.Adapters.Cowboy.Handler', первонач, 3}}, {StackTrace, [ {'Elixir.Plug.Parsers', уменьшить, 6, [{файл," lib/plug...

Есть ли обходной путь, позволяющий загружать более крупные файлы?

Кажется, что ключевое слово опции :length в Plug, но как я могу установить его из Phoenix? И в чем причина выбора этого значения 8_000_000?

Ответ 1

Вы можете настроить это в своем файле config/config.exs:

config :phoenix, MyApp.Router,
  ...
  parsers: [parsers: [:urlencoded, :multipart, :json],
            accept: ["*/*"],
            json_decoder: Poison,
            length: 100_000_000],

Ответ 2

FYI, для самых современных документов по этой функциональности (так как этот вопрос и эти ответы довольно устаревшие на данный момент), см. официальные документы: http://www.phoenixframework.org/docs/file-uploads