Я пытаюсь загрузить файл в dropbox throug nodeJS. Этот запрос CURL работает.
curl -X POST https://content.dropboxapi.com/2/files/upload \
--header "Authorization: Bearer myToken" \
--header "Dropbox-API-Arg: {\"path\": \"/Homework/math/Matrices.txt\",\"mode\": \"add\",\"autorename\": true,\"mute\": false}" \
--header "Content-Type: application/octet-stream" \
--data-binary @fileName
Я не знаю, как перевести его в javascript-код. Вот что я сделал до сих пор:
var request = require('request')
var headers = {
"Authorization": "Bearer " + dropboxToken,
"Dropbox-API-Arg": {
"path": "/"+fileName, //nome sul drive
"mode": "add",
"autorename": true,
"mute": false
},
"Content-Type": "application/octet-stream"
}
var options = {
url: 'https://content.dropboxapi.com/2/files/upload',
method: 'POST',
headers: headers,
}
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
});
Как включить data-binary
параметр данных в этот запрос, чтобы выбрать файл для загрузки?
Благодарю.
вы можете создать поток чтения, а затем передать его для запроса с вашими текущими заголовками и параметрами like-
fs.createReadStream('/path/to/youfile').pipe(request.post(options).on('end', (done) => { console.log('success') }));
Во-первых, если вы пытаетесь интегрироваться с API Dropbox в JavaScript, мы рекомендуем использовать официальный Dropbox API v2 JavaScript SDK, поскольку он выполнит большую часть работы для вас:
https://github.com/dropbox/dropbox-sdk-js
В противном случае, если вы не хотите использовать SDK, вы можете сами сделать запросы. В этом случае параметр --data-binary
является параметром curl
для подачи данных для curl
запроса. curl
затем берет эти данные и помещает их в тело запроса, что является правильным способом предоставить данные файла для конечной точки стиля "контент-загрузка" Dropbox API v2, например /2/files/upload.
Итак, вы должны проверить документацию для HTTP-клиента, который вы используете, для получения информации о том, как установить тело запроса. Похоже, вы используете модуль узла request
, который, как представляется, принимает опцию body
, где вы можете поместить данные запроса.
var options = { url: 'https://content.dropboxapi.com/2/files/upload', headers: headers, body: '@'+'/myFile.txt' }
но это не работает
@
- это просто способ указать локальный файл для curl
. Это предположительно не относится к модулю запроса узла. Из документации для этого вы должны предоставить данные как « Buffer
, String
или ReadStream
».