簡體   English   中英

如何將大文件從表單上傳到 Phoenix?

[英]How to upload a big file from a form to Phoenix?

我有一個帶有文件字段的 HTML 表單,用於將文件上傳到我的 Phoenix 應用程序中的/file路由。

我使用curl -v -F "file=@MyTestFile" http://localhost:4000/file/從命令行模仿這種行為,以加快測試速度。

當我使用大文件時(轉折點似乎在 7.7MB 左右),我從 Plug 得到以下異常:

18:40:38.897 [error] 進程 <0.420.0> 錯誤,退出值:{[{reason,#{' exception '=>true,' struct '=>'Elixir.Plug.Parsers.RequestTooLargeError',message =>nil}},{mfa,{'Elixir.Plug.Adapters.Cowboy.Handler',init,3}},{stacktrace,[{'Elixir.Plug.Parsers',reduce,6,[{file,"庫/插件...

是否有允許上傳更大文件的解決方法?

Plug 中似乎有一個:length選項關鍵字,但我如何從 Phoenix 設置它? 選擇這個特定值8_000_000的原因是什么?

您可以在config/config.exs文件中進行config/config.exs

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

僅供參考,有關此功能的最新文檔(因為此問題和這些答案此時已過時),請參閱官方文檔: https : //phoenixframework.readme.io/docs /文件上傳

請注意,接受的答案意味着所有請求類型都將增加其最大允許長度。 截至 2022 年 2 月, Plug.Parsers文檔顯示您可以僅為endpoint.ex中的多部分解析器設置此項:

如果你只想增加多部分請求的限制(通常是用於文件上傳的請求),你可以這樣做:

plug Plug.Parsers,
     parsers: [
       :url_encoded,
       {:multipart, length: 20_000_000}, # Increase to 20MB max upload
       :json
     ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM