node download file from Dropbox
Нужна помощь. Пользуясь подсказками "dropbox.com/developers" мне без особых проблем удалось закинуть файл на Дропбокс, а вот получить что то правильно не получается. То есть, ответ и файл я получаю, но записать в файл не могу. Пытаясь скачать картинку в ответ я получаю string, и пытаюсь сохранить эту картинку, но не получается
fs.writeFile('img.jpg',request.body, (err) => {
if (err) throw err;
console.log('It\'s saved!');
done()
});
Как с этим бороться? |
Что находится в request.body?
Вроде бы надо записать ответ дропбокса, почему request-то? |
Как-то так это делается:
const http = require("http");
http.request({
host: "hostname",
path: "/path/to/api"
}, (response) => {
let file = fs.createWriteStream('./file');
response.pipe(file);
});
|
Сори, не Request a Response. В body находится картинка которую прислал дропбок в строковом формате. Как этот ответ записать в файл?
|
let file = fs.createWriteStream('./file');
response.pipe(file);
Пробовал? |
Нет. У меня не работает(.
На загрузку с дропбокса вот такая функция
download: function(path, cb) {
var args = {
"method": "POST",
"headers": {
"Authorization": "Bearer " + accessToken,
"Dropbox-API-Arg": JSON.stringify({
path: "/" + path
})
},
"url": 'https://content.dropboxapi.com/2/files/download',
}
return request(args, cb)
},
Текстовые файлы качает и записывает нормально, а вот с изображением как то не очень, такое впечатление что дроп отдает или не то что надо (в чём сомневаюсь, так как текст все таки приходит), или в каком то формате. Пробувал эту же картинку прочитать и записать в файл локально без скачивания, все работает. |
request - это модуль https://www.npmjs.com/package/request? Уточнять надо.
Если так, то там в первом же параграфе мануала описан потоковый интерфейс.
var args = {
"method": "POST",
"headers": {
"Authorization": "Bearer " + accessToken,
"Dropbox-API-Arg": JSON.stringify({
path: "/" + path
})
},
"url": 'https://content.dropboxapi.com/2/files/download',
};
request(args).pipe(fs.createWriteStream('./file'));
|
Извиняюсь за надоедливость, в Node я пока что новичок. Download функция у меня находится в модуле и должна только передавать данные, а записывать в файл уже в другом месте.
Повторюсь еще раз, с текстовыми файлами проблем нету, они нормально скачиваются с дропа и так же без проблем потом записываются, а вот картинки ни как |
Цитата:
Не стесняйся, спрашивай больше, пиши подробней: чем больше информации, тем проще решить задачу. Цитата:
function download() {
// var args = ...
return request(args);
}
А в другом месте этот поток пайпится в файл:
download().pipe(fs.createWriteStream("./file"));
Просто потоки - это реально очень удобно, кода получается мало и многие проблемы решаются автоматически. |
Чтобы, всё же, сохранять изображения через fs.writeFile (но лучше делать не так, а через потоки, как я прежде показал), надо установить кодировку на двоичную:
fs.writeFile("./file", response.body, "binary", function(err) {
//...
});
И проследи, чтобы формат response.body тоже был двоичный. Если это какой-нибудь base64, то его надо сперва раскодировать. |
| Часовой пояс GMT +3, время: 15:45. |