2013-09-24 3 views
4

Я пытаюсь, с сервера, взять изображение из Интернета по его URL-адресу (то есть http://www.skrenta.com/images/stackoverflow.jpg) и сохранить это изображение в моем ковше AWS S3, используя Meteor, aws- sdk, метеоритный пакет, а также пакет http meteor.Метеор: Сохранение изображений из URL-адресов в хранилище AWS S3

Это моя попытка, которая действительно помещает файл в мое ведро (someImageFile.jpg), но файл изображения поврежден и не может быть отображен браузером или программой просмотра.

Возможно, я делаю что-то неправильно с кодировкой файла. Я пробовал много комбинаций, и никто из них не работал. Кроме того, я попытался добавить ContentLength и/или ContentEncoding с различными кодировками, как двоичном, шестнадцатеричном, base64 (также в сочетании с Buffer.toString("base64"), ни один из них не работал. Любые советы будут с благодарностью!

Это в моей стороне сервера -код:

var url="http://www.skrenta.com/images/stackoverflow.jpg"; 
HTTP.get(url, function(err, data) { 
    if (err) { 
     console.log("Error: " + err); 
    } else { 
     //console.log("Result: "+JSON.stringify(data)); 
     //uncommenting above line fills up the console with raw image data 
     s3.putObject({ 
       ACL:"public-read", 
       Bucket:"MY_BUCKET", 
       Key: "someImageFile.jpg", 
       Body: new Buffer(data.content,"binary"), 
       ContentType: data.headers["content-type"], // = image/jpeg 
       //ContentLength: parseInt(data.headers["content-length"]), 
       //ContentEncoding: "binary" 
      }, 
      function(err,data){ // CALLBACK OF HTTP GET 
       if(err){ 
        console.log("S3 Error: "+err); 
       }else{ 
        console.log("S3 Data: "+JSON.stringify(data)); 
       } 
      } 
    ); 
    } 
}); 

на самом деле я пытаюсь использовать filepicker.io REST API с помощью HTTP-вызовов, т.е. для хранения преобразованного изображения в мои s3, но для данной задачи это минимальный пример, чтобы продемонстрировать фактические проблема

ответ

0

Лучшим решением является поиск т то, что уже было сделано в связи с этим:

https://github.com/Lepozepo/S3

Также filepicker.so кажется довольно простым:

Integrating Filepicker.IO with Meteor

+0

Эй FredericoC, спасибо за вход, то эти источники действительно хорошо, но не решают дела. Я обновляю свой пост, чтобы сделать его более понятным, что серверная сторона получает и толкает, никаких клиентов. –

6

После нескольких проб Н. пробеги ошибок я дал на Meteor.HTTP и вместе взятые код ниже, возможно, это поможет кому-то при работе с проблемами кодирования с Meteor.HTTP.

Meteor.HTTP, похоже, предназначено только для получения некоторых JSON или текстовых данных из удаленных API-интерфейсов и, как-то, кажется, не является тихим выбором для двоичных данных. Тем не менее, модуль HTTP НПМ определенно поддерживает двоичные данные, так что это работает как шарм:

var http=Npm.require("http"); 

url = "http://www.whatever.com/check.jpg"; 

var req = http.get(url, function(resp) { 
    var buf = new Buffer("", "binary"); 
    resp.on('data', function(chunk) { 
     buf = Buffer.concat([buf, chunk]); 
    }); 
    resp.on('end', function() { 
     var thisObject = { 
      ACL: "public-read", 
      Bucket: "mybucket", 
      Key: "myNiceImage.jpg", 
      Body: buf, 
      ContentType: resp.headers["content-type"], 
      ContentLength: buf.length 
     }; 
     s3.putObject(thisObject, function(err, data) { 
      if (err) { 
       console.log("S3 Error: " + err); 
      } else { 
       console.log("S3 Data: " + JSON.stringify(data)); 
      } 
     }); 
    }); 
}); 
Смежные вопросы