【发布时间】:2019-02-14 08:40:09
【问题描述】:
我一直在尝试让一个简单的无服务器 API 网关 -> NodeJS Lambda -> S3 工作,但似乎 Lambda 只是上传了损坏的文件。
此代码将从 URL 下载文件,然后直接上传到 S3。 我尝试了 putObject 和上传(使用不同的参数)都没有成功。查看我下载原始文件时的文件大小是 24KB,而从 S3 下载的(损坏的)图像是 44KB。
我只是通过对 API Gateway URL 执行 POST 来测试应用程序。
有什么想法吗?
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)
}
})
})
})
}
【问题讨论】:
-
可能请求执行了两次。您是否将 lambda 函数绑定到任何事件?
-
它通过我的 serverless.yml 绑定:函数:上传:处理程序:handler.upload 事件:-http:路径:事件/上传方法:发布
-
您的代码是否在 API Gateway/Lambda 之外工作?
-
当我尝试在 AWS 控制台中手动测试/运行它时它不起作用。
标签: node.js amazon-web-services amazon-s3