0
我試圖使用hackney流多部分窗體。使用hackney流文件
這是我當前的代碼:
method = :post
path = "https://httpbin.org/post"
req_headers = [
{"Content-Type", "multipart/form-data"}
]
{:ok, pid} = :hackney.request(method, path, req_headers, :stream, [])
:hackney.send_multipart_body(pid, {:file, "/Users/gmile/.vimrc"})
{:ok, _status, _headers, pid} = :hackney.start_response(pid)
{:ok, body} = :hackney.body(pid)
在有:hackney.send_multipart_body/2
行,我看得到異常:
** (ArgumentError) argument error
:erlang.byte_size(nil)
(hackney) src/hackney_multipart.erl:134: :hackney_multipart.mp_header/2
(hackney) src/hackney_multipart.erl:239: :hackney_multipart.mp_file_header/2
(hackney) src/hackney_request.erl:222: :hackney_request.stream_multipart/2
(hackney) src/hackney.erl:432: anonymous fn/2 in :hackney.send_multipart_body/2
read_and_stream.exs:13: (file)
問:我究竟做錯了什麼?
在我的代碼中顯然有一個錯誤,但由於關於:hackney.send_multipart_body/2
的文檔很少,所以我無法將這個問題包裹起來。
我開始調試了。
下面是堆棧跟蹤的執行路徑,在來電訂購:
- https://github.com/benoitc/hackney/blob/master/src/hackney.erl#L432
- https://github.com/benoitc/hackney/blob/master/src/hackney_request.erl#L222
- https://github.com/benoitc/hackney/blob/master/src/hackney_multipart.erl#L239
- https://github.com/benoitc/hackney/blob/master/src/hackney_multipart.erl#L134
如果我理解正確的話,應該有一個Boundary
vari能夠在HTTP客戶端進程中設置。不過,我似乎無法理解它在哪裏設置。
我認爲你需要使用':stream_multipart'作爲第四個參數(而不是':流')在調用':hackney.request/5'的時候。 – Dogbert
謝謝你親切的先生。你剛剛救了我幾個小時的抓我的頭:)請張貼答案,我會接受它。 – gmile