J'essaie de diffuser un formulaire en plusieurs parties en utilisant hackney.Diffuser un fichier en utilisant hackney
Ceci est mon code actuel:
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)
en ligne avec :hackney.send_multipart_body/2
, je vois arriver exception:
** (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)
Question: ce que je fais mal?
Il y a clairement un bogue dans mon code, mais comme il y a peu de documentation sur :hackney.send_multipart_body/2
, je ne peux pas m'en sortir.
J'ai commencé le débogage.
Voici le chemin d'exécution du stacktrace, dans l'ordre d'appel:
- 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
Si je comprends bien, il devrait y avoir un Boundary
vari pouvoir défini dans le processus client HTTP. Cependant, je n'arrive pas à comprendre où cela se passe.
Je pense que vous devez utiliser ': stream_multipart' comme le 4ème argument (au lieu de': flux ') dans l'appel': hackney.request/5'. – Dogbert
Merci monsieur monsieur. Vous venez de me sauver quelques heures de me gratter la tête :) S'il vous plaît poster la réponse et je vais l'accepter. – gmile