FaaS 文件上传
一、使用场景#
仅适用于 Serverless 环境,小于 6M 的文件上传到函数端,进行文件相关处理操作。
二、前置需求#
确认上传的文件是否小于 6M,超过 6M 的文件建议使用 OSS 直传方案。
三、代码中如何使用#
1. 代码中安装上传组件#
npm i @midwayjs/faas-middleware-upload --save2. 添加配置#
在函数目录中创建 config 目录,在此目录中添加 config.default.ts 文件
// config/config.default.tsexport const upload = { mod: 'stream',};配置中的 mod 支持三种模式,默认为 stream,即流式,还支持 buffer 和 file 两种配置,这三种 mod 配置分别对应的 file.data 为 ReadStream、File Data Buffer 和 临时文件地址。
#
3. 添加组件#
在函数目录中创建 configuration.ts 文件
// configuration.tsimport { Configuration, App } from '@midwayjs/decorator';import * as Upload from '@midwayjs/faas-middleware-upload';
@Configuration({ importConfigs: ['./config/'], imports: [Upload],})export class ContainerConfiguration { @App() app;
async onReady() { const uploadMW = await this.app.generateMiddleware(Upload.Upload); this.app.use(uploadMW); }}4. 代码中获取上传后的文件#
// index.tsimport { Provide, Inject, ServerlessTrigger } from '@midwayjs/decorator';
@Provide()export class IndexHandler { @Inject() ctx;
@ServerlessTrigger(ServerlessTriggerType.HTTP, { path: '/upload', method: 'post', }) async handler() { const files = (this.ctx as any).files; /* files = [ { filename: "20210118142906.jpg", data: FileReadStream, // 还支持其他模式,参照配置中的 mod 参数 fieldname: "fileFormName", mimeType: "image/jpeg" } ] */ const fields = (this.ctx as any).fields; /* fields = { formKey: formValue } */ }}