Ich versuche, ein Lambda-Skript, das ein Bild von einer Website ziehen und in S3 speichern kann, zu schreiben. Das Problem, das ich habe, ist, welche Art von Objekt als Body-Attribut in die S3.putObject
-Methode übergeben werden. In der Dokumentation here heißt es, dass es entweder new Buffer('...') || 'STRING_VALUE' || streamObject
sein sollte, aber ich bin mir nicht sicher, wie man die https Antwort in eine von denen umwandelt. Hier ist, was ich versucht habe:aws Lambda, wie ein Bild gespeichert über HTTPS in S3
var AWS = require('aws-sdk');
var https = require('https');
var Readable = require('stream').Readable;
var s3 = new AWS.S3();
var fs = require('fs');
var url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/AmazonWebservices_Logo.svg/500px-AmazonWebservices_Logo.svg.png';
exports.handler = function(event, context) {
https.get(url, function(response) {
var params = {
Bucket: 'example',
Key: 'aws-logo.png',
Body: response // fs.createReadStream(response); doesn't work, arg should be a path to a file...
// just putting response errors out with "Cannot determine length of [object Object]"
};
s3.putObject(params, function(err, data) {
if (err) {
console.error(err, err.stack);
} else {
console.log(data);
}
});
});
};
Bitte beachten Sie http://stackoverflow.com/questions/19016130/pushing-binary-data-to -amazon-s3-using-node-js – Shibashis
Wenn ich mich nicht irre, sieht es so aus, als würde das Skript in diesem Beispiel auf einem lokalen Rechner laufen, sie benutzen curl um die Datei auf dem Datenträger zu speichern und dann ein Stream mit dem Pfad zu dieser gespeicherten Datei. Da ich auf Lambda bin kann ich die Datei nicht auf Platte speichern – kleaver
"Da ich auf Lambda bin kann ich die Datei nicht auf Platte speichern". Das ist nicht korrekt. Sie haben Speicherplatz auf Lambda, um Dateien vorübergehend zu speichern. –