Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.05.2016, 23:16
Аспирант
Отправить личное сообщение для Boogie1989 Посмотреть профиль Найти все сообщения от Boogie1989
 
Регистрация: 21.10.2014
Сообщений: 37

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()
});


Как с этим бороться?

Последний раз редактировалось Boogie1989, 05.05.2016 в 23:33.
Ответить с цитированием
  #2 (permalink)  
Старый 07.05.2016, 08:13
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Что находится в request.body?
Вроде бы надо записать ответ дропбокса, почему request-то?
Ответить с цитированием
  #3 (permalink)  
Старый 07.05.2016, 08:19
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Как-то так это делается:
const http = require("http");

http.request({
	host: "hostname",
	path: "/path/to/api"
}, (response) => {
	let file = fs.createWriteStream('./file');
	response.pipe(file);
});
Ответить с цитированием
  #4 (permalink)  
Старый 08.05.2016, 00:54
Аспирант
Отправить личное сообщение для Boogie1989 Посмотреть профиль Найти все сообщения от Boogie1989
 
Регистрация: 21.10.2014
Сообщений: 37

Сори, не Request a Response. В body находится картинка которую прислал дропбок в строковом формате. Как этот ответ записать в файл?
Ответить с цитированием
  #5 (permalink)  
Старый 08.05.2016, 14:01
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

let file = fs.createWriteStream('./file');
response.pipe(file);


Пробовал?
Ответить с цитированием
  #6 (permalink)  
Старый 08.05.2016, 17:45
Аспирант
Отправить личное сообщение для Boogie1989 Посмотреть профиль Найти все сообщения от Boogie1989
 
Регистрация: 21.10.2014
Сообщений: 37

Нет. У меня не работает(.
На загрузку с дропбокса вот такая функция
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)
                },

Текстовые файлы качает и записывает нормально, а вот с изображением как то не очень, такое впечатление что дроп отдает или не то что надо (в чём сомневаюсь, так как текст все таки приходит), или в каком то формате. Пробувал эту же картинку прочитать и записать в файл локально без скачивания, все работает.
Ответить с цитированием
  #7 (permalink)  
Старый 09.05.2016, 06:55
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

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'));
Ответить с цитированием
  #8 (permalink)  
Старый 10.05.2016, 19:50
Аспирант
Отправить личное сообщение для Boogie1989 Посмотреть профиль Найти все сообщения от Boogie1989
 
Регистрация: 21.10.2014
Сообщений: 37

Извиняюсь за надоедливость, в Node я пока что новичок. Download функция у меня находится в модуле и должна только передавать данные, а записывать в файл уже в другом месте.
Повторюсь еще раз, с текстовыми файлами проблем нету, они нормально скачиваются с дропа и так же без проблем потом записываются, а вот картинки ни как
Ответить с цитированием
  #9 (permalink)  
Старый 11.05.2016, 09:47
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Извиняюсь за надоедливость, в Node я пока что новичок.
Как бы форум для того и существует, чтобы с вопросами надоедать)
Не стесняйся, спрашивай больше, пиши подробней: чем больше информации, тем проще решить задачу.

Цитата:
Download функция у меня находится в модуле и должна только передавать данные, а записывать в файл уже в другом месте.
Ну так пусть download передает поток:
function download() {
  // var args = ...
  return request(args);
}

А в другом месте этот поток пайпится в файл:
download().pipe(fs.createWriteStream("./file"));


Просто потоки - это реально очень удобно, кода получается мало и многие проблемы решаются автоматически.
Ответить с цитированием
  #10 (permalink)  
Старый 11.05.2016, 09:50
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Чтобы, всё же, сохранять изображения через fs.writeFile (но лучше делать не так, а через потоки, как я прежде показал), надо установить кодировку на двоичную:
fs.writeFile("./file", response.body, "binary", function(err) {
  //...
});


И проследи, чтобы формат response.body тоже был двоичный. Если это какой-нибудь base64, то его надо сперва раскодировать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
NotedOK.com: Быстрые записи в веб, сохраняются как текстовые файлы в Dropbox artemkv Ваши сайты и скрипты 0 06.12.2014 03:16
swfupload не грузит в опера работает хроме в чем ошибка? kolobok416 Flash 0 02.06.2014 23:01
Какая разница между модулями DOM Level 2 и интерфейсами Node? dump Общие вопросы Javascript 3 09.08.2012 17:22
Переопределить функции .childElements rikitikitavi Events/DOM/Window 2 18.03.2011 21:44
загрузка джаваскрипта file by file с номером ревизии(последней) в урле для файла sergdev Ваши сайты и скрипты 7 13.04.2010 10:52