I was using:
curl -v -F file=@/tmp/x.png -F "initial_comment" -F channels='xyz' -H "Authorization: Bearer oauth" https://slack.com/api/files.upload
Works still very well, but file.upload
will be discontinued soon.
Now, after reading the doc, I tried:
curl \
-H "Authorization: Bearer xxx" \
-H "Content-Type: application/json" \
-F "filename=/tmp/img.png" \
-F "length=$(wc -c < /tmp/img.png)" \
https://slack.com/api/files.getUploadURLExternal | jq .
or
curl -X POST \
-H "Authorization: Bearer xxx" \
-H "Content-Type: application/x-www-form-urlencoded" \
-F "filename=@/tmp/img.png" \
-F "length=$(wc -c < /tmp/img.png)" \
https://slack.com/api/files.getUploadURLExternal | jq .
But I get JSON error for the first one:
{
"ok": false,
"error": "invalid_arguments",
"warning": "missing_charset",
"response_metadata": {
"messages": [
"[ERROR] missing required field: length",
"[ERROR] missing required field: filename"
],
"warnings": [
"missing_charset"
]
}
}
and the second command:
{
"ok": false,
"error": "invalid_arg_name"
}
How to pass parameters correctly ? The doc have no example in Curl. My charset is utf8
, same, how to pass it?
Ok, figured it out by trying different methods:
length=$(wc -c < /tmp/img.png)
curl \
-H "Authorization: Bearer xxx" \
-H "Content-Type: application/x-www-form-urlencoded; charset=utf-8" \
-d "filename=test" \
-d "length=$length" \
https://slack.com/api/files.getUploadURLExternal | jq .