Одна вещь, которую я удивляю, еще не упоминалась, заключается в том, что реализация Runnable
делает ваш класс более гибким.
Если вы расширяете поток, то действие, которое вы делаете, всегда будет быть в потоке. Однако, если вы реализуете Runnable
, это не обязательно. Вы можете запустить его в потоке или передать его какой-либо службе-исполнителю или просто передать его как задачу в однопоточном приложении (возможно, для запуска позднее, но в пределах одного потока). Опции гораздо более открыты, если вы просто используете Runnable
, чем если бы вы привязали себя к Thread
.
Вы можете получить изображение с помощью aws s3 api, а затем записать его в папку tmp с помощью fs.
var params = { Bucket: "BUCKET_NAME", Key: "OBJECT_KEY" };
s3.getObject(params, function(err, data){ if (err) {
console.error(err.code, "-", err.message);
return callback(err); }
fs.writeFile('/tmp/filename', data.Body, function(err){
if(err)
console.log(err.code, "-", err.message);
return callback(err);
});
});
Из любопытства, зачем вам нужно писать файл, чтобы прикрепить его? Кажется, что излишне писать файл на диск, чтобы потом читать его с диска
Если вы пишете это прямо в файловой системе, вы также можете делать это с потоками . Это может быть немного быстрее / удобнее для памяти, особенно в среде с ограничением памяти, например, Lambda.
var fs = require('fs');
var params = {
Bucket: "mybucket",
Key: "image.png"
};
var tempFileName = path.join('/tmp', 'downloadedimage.png');
var tempFile = fs.createWriteStream(tempFileName);
s3.getObject(params).createReadStream().pipe(tempFile);
getObject
, и это позволяет моей Лямбда-функции достичь максимального предела памяти. Есть ли обходной путь или почему ограничение памяти настолько низкое? – V. Samma 28 September 2016 в 13:28