Я пытался заставить работать простой безсерверный API-шлюз -> NodeJS Lambda -> S3, однако кажется, что Lambda просто загружает поврежденные файлы.
Этот код будет загружать файл с URL-адреса, а затем напрямую загружать на S3.
Я пробовал оба метода putObject & upload (с разными параметрами), но безуспешно. Размер файла при загрузке оригинала составляет 24 КБ, а загруженного (поврежденного) образа с S3 - 44 КБ.
Я просто тестирую приложение, выполняя POST к URL-адресу шлюза API.
Есть идеи?
var url =
"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/AmazonWebservices_Logo.svg/500px-AmazonWebservices_Logo.svg.png"
module.exports.upload = function(event, context, callback) {
https.get(url, function(res) {
var body = ""
res.on("data", function(chunk) {
// Agregates chunks
body += chunk
})
res.on("end", function() {
console.log(body)
// Once you received all chunks, send to S3 - putObject only
var params = {
Bucket: S3_BUCKET_NAME,
Key: "aws-logo.png",
Body: body
}
var s3Params = {
Bucket: S3_BUCKET_NAME,
Key: "aws-logo-upload.png",
Body: body,
ContentType: "image/png"
}
s3.upload(s3Params, function(err, data) {
// s3.putObject(params, function(err, data) {
if (err) {
console.log("error")
console.error(err, err.stack)
callback(null, { statusCode: 404, error })
} else {
console.log("ok")
console.log(data)
let response = {
statusCode: 200
}
callback(null, response)
}
})
})
})
}