node.js - 如何使用无服务器将二进制文件(如图像)上传到 aws api 网关
问题描述
我正在使用无服务器框架来启动由 API 网关调用的 lambda 函数。我想将图像上传到 api 并将其写入 s3 存储桶。但是当我收到函数上的图像时,编码似乎有问题。
我已经尝试过(serverless-apigw-binary)但失败了。\
当前代码
const author = getUserName(this.head.ssid);
writeFile(author + "/" + this.head.title + "/index.jpg", this.img)
.then(_ => {
resolve(forMessage("Success"));
}).catch(err => resolve(forError(err.toString())))
写入文件函数
import {S3} from "aws-sdk"
const s3 = new S3({accessKeyId: process.env["KEY"], secretAccessKey: process.env["SECRET"]});
export function writeFile(Key: string, Body: string | Buffer) {
return new Promise((resolve, reject) => {
s3.putObject({Key, Bucket: process.env["BUCKET_ARTICLE"], Body}, (err, data) => {
if (err)
reject(err);
else
resolve(data);
})
})
}
无服务器配置
plugins:
- serverless-apigw-binary
- serverless-offline
custom:
apigwBinary:
types:
- 'image/jpeg'
functions:
upload:
handler: src/functions/upload.handler
events:
- http:
path: upload
method: post
contentHandling: CONVERT_TO_BINARY
cors:
origins:
- 'http://localhost:5000'
headers:
- MY_CUSTOM_HEADER
- Content-Type
- X-Amz-Date
- Authorization
- X-Api-Key
- X-Amz-Security-Token
我正在使用邮递员上传图片。
解决方案
推荐阅读
- php - 仅在通过 Apache2 连接时远程 MySqli 连接超时
- mysql - 在 laravel 中保存下拉列表值
- angular - 页面转换很慢并且与 ionic 5 中的 ionic Angular 路由重叠
- r - 如果满足条件,将值保持在行中
- android - 我无法让 Android Studio 和 gradle 工作以将我的应用程序添加到 android 应用程序包中
- javascript - 检查 div 是否有 xx 类来隐藏和显示父元素
- algorithm - 仅最优 - 最少停靠点和哪些停靠点
- javascript - jest --watch 由临时文件触发
- c# - 分区输入和并行执行查询
- r - 从 R 调整 c3 绘图的线条粗细