2017-02-12 10 views
1

Я пытаюсь загрузить gif в Gfycat, используя их public API.axios, эквивалентный curl --upload-file

Это делается с помощью Curl в командной строке с:

curl https://filedrop.gfycat.com --upload-file /tmp/name 

Я попытался преобразовать это Node.js с помощью axios:

axios.post("https://filedrop.gfycat.com", { 
    data: fs.createReadStream("/tmp/name") 
}).then(console.log).catch(console.log); 

но ошибка с сообщением

<?xml version="1.0" encoding="UTF-8"?>\n<Error><Code>PreconditionFailed</Code><Message>At least one of the pre-conditions you specified did not hold</Message><Condition>Bucket POST must be of the enclosure-type multipart/form-data</Condition><RequestId>6DD49EB33F41DE08</RequestId><HostId>/wyrORPfBWHZk5OuLCrH9Mohwu33vOUNc6NzRSNT08Cxd8PxSEZkzZdj/awpMU6UkpWghrQ1bLY=</HostId></Error> 

печатается на консоль.

Как мой код Node.js отличается от команды cURL и каков будет эквивалентный код с использованием axios для команды cURL?

ответ

1

Вы необходимо использовать FormaData() можно использовать form-data и может также необходимо использовать concat-stream:

const concat = require("concat-stream") 
const FormData = require('form-data'); 
const fd = new FormData(); 
const fs = require('fs'); 

fd.append("hello", "world") 
fd.append("file", fs.createReadStream("/tmp/name")) 
fd.pipe(concat({encoding: 'buffer'}, data => { 
    axios.post("https://filedrop.gfycat.com", data, { 
    headers: fd.getHeaders() 
    }) 
})) 

Кредит: https://github.com/mzabriskie/axios/issues/318#issuecomment-277231394

+0

Я использую AXIOS из Node.js, FormData используется только для аксиомов в браузере. – Shadowfacts