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, время: 10:22. |