2016-10-31 6 views
0

Попытка запросить изображение из Google CDN и загрузить его на S3. Использование библиотеки https://github.com/request/request и Node/Express;Как обрабатывать файл изображения с googleusercontent CDN в узле?

Немного смущенно, как обращаться с полезной нагрузкой, возвращающейся из CDN Google. enter image description here

Изображение возвращается в поле тела и в кодировке. Не уверен, как он закодирован.

Учитывая URL в Google CDN:

const fileURL = https://lh4.googleusercontent.com/EWE1234rFL006WfQKuAVrsYMOiKnM6iztPtLgXM5U…3i26LoPHQwPTQME7ne3XoMriKVjUo3hrhwWw1211223

request(fileURL, (err, res, body) => { 

    //NOT sure how to handle the response here?? 
    //Trying base64 
    fs.writeFileSync(`.tmp/file1.png`, body, {encoding: 'base64'}); 

    //Trying Binary 
    fs.writeFileSync(`.tmp/file.png`, body, {encoding: 'binary'}); 
    } 

тело возвращается как:

�PNG↵↵IHDRv&vл� IDATx�}���<z�f���];��o]��A�N�.po�/�/R���..............

1). Запросить изображение от googleusercontent Google CDN (изображение было первоначально вставлено в Google Doc)

2). Создайте файл изображения и напишите на диск на сервере.

Ни один из fs.writeFileSync, кажется, не создает читаемый файл изображения.

Любые советы по обращению с этим было бы удивительным ..

+0

Что вы используете для загрузки на S3? Вы, скорее всего, можете передать тело так, как есть. –

+0

Извините, я должен подчеркнуть, что проблема заключается в том, что написанное изображение не читается. Переход к редактированию моего сообщения. Попытка понять, как обрабатывать строку, возвращаемую из Google, и создавать из нее файл. –

ответ

0

Передайте ответ, как тело к вашей загрузки S3.

var request = require('request'), 
    fs = require('fs'), 
    aws = require('aws-sdk'), 
    s3 = new aws.S3(), 
    url = 'https://lh4.googleusercontent.com/-2XOcvsAH-kc/VHvmCm1aOoI/AAAAAAABtzg/SDdN1Vg5FFs/s346/14%2B-%2B1'; 

# Store in a file 
request(url).pipe(fs.createWriteStream('file.gif')); 

request(url, {encoding: 'binary'}, function(error, response, body) { 
    # Another way to store in a file 
    fs.writeFile('file.gif', body, 'binary', function(err) {}); 

    # Upload to S3 
    s3.upload({ 
     Body: body, 
     Bucket: 'BucketName', 
     Key: 'file.gif', 
    }, function(err, data) {}); 
}); 
+0

Да, это в основном то, что я делаю. Файл, записанный на диск, не читается. –

+0

Обратите внимание на часть кодировки на запрос вызова 'request (url, {encoding: 'binary'}' –

+0

Отлично. Это сработало. –