Проблема решена. Мне просто нужно было убрать {"Content-Type", "multipart/form-data"}
в заголовке запроса. Hackney уже предоставляет один с границей .
My Content-Type
Выглядел так:
Content-Type: multipart/form-data
Когда это должно было выглядеть так:
Content-Type: multipart/form-data; boundary=---------------------------tlzhgtmgeelwolfm
Вот исправленный код:
{:ok, ref} = :hackney.request(
:post,
"https://slack.com/api/files.upload?"
<> Plug.Conn.Query.encode(%{
"channels" => channel_id,
"filename" => "test.pdf",
"filetype" => "pdf"
}),
[
{"Authorization", "Bearer xoxb-XXXXX"},
],
:stream_multipart,
[])
:hackney.send_multipart_body(
ref,
{:file, "./test.pdf"})
{:ok, _status, _headers, ref} = :hackney.start_response(ref)
{:ok, body} = :hackney.body(ref)
body |> Poison.decode! |> IO.inspect