文件跑龙套
这个包提供了在LoopBack 4微服务中添加文件上传和验证的实用程序。
安装
安装软件包的命令如下:
npm install @sourceloop/file-utils
使用
- 绑定组件并添加需求绑定。
this.bind(AWSS3Bindings.Config).to({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
region: process.env.AWS_REGION,
} as AwsS3Config);
this.component(FileUtilComponent);
有两种方法可以在控制器中接受多部分请求
- 添加
multipartRequestBody修饰符到你想要接受带有/不带有文件的多部分请求体的控制器方法
@post(`/parents/no-model-metadata`)
@response(200, {
description: 'Parent without config model instance',
content: {
'application/json': {schema: getModelSchemaRef(ParentWithConfig)},
},
})
async createWithOutModelConfig(
@multipartRequestBody(ParentWithConfig)
data: ParentWithModelConfig,
): Promise<void> {
...
}
你可以阅读更多关于这个装饰 在这里
- 添加
file修饰符到控制器方法,您希望在其中处理文件
@file(getJsonSchema(Parent) as SchemaObject, ['file'], ['.csv'])
data: ParentWithFile,
您可以阅读更多关于文件装饰器及其参数的信息 在这里
多部分请求装饰器
这个装饰器允许 multipart/form-data 请求主体,包含任意多的字段和文件。它要求您为请求定义一个模型,如果任何字段是文件类型,则需要用 @fileProperty -
@model()
export class ParentWithConfig extends Entity {
@property({
type: 'string',
id: true,
})
id?: string;
@property({
type: 'string',
required: true,
})
name: string;
// file field
@fileProperty({
type: 'object',
// you can configure individual fields here
validators: [FileTypeValidator],
extensions: ['.png', '.txt'],
})
file: Express.Multer.File;
constructor(data?: Partial<ParentWithConfig>) {
super(data);
}
}
文件装饰
这个装饰器被设计用来处理单个文件的上传 multipart/form-data 请求。它提供了一种结构化的方式来管理请求主体中的多个字段,包括文件字段。
参数
-
模式 (
SchemaObject):- 请求主体的模式对象。在您有多个字段并且希望以结构化的方式处理这些数据的情况下,它非常有用。例如,如果您的请求有一个文件字段和一个名称字段,您可以用这些字段定义一个模式对象,并将其传递给装饰器。文件字段将在模式中被标记为二进制。
-
filefield (
string[]):- 模式中表示文件上传的字段。所以根据上面的例子,你可以通过
['file']到此参数。这将在模式中将文件字段标记为二进制。
- 模式中表示文件上传的字段。所以根据上面的例子,你可以通过
-
allowedExtensions (
string[]):- 上传文件允许的文件扩展名。
-
storageOptions (
IFileStorageOptions<T>):- 文件存储的选项。这支持任何多存储引擎类。默认情况下,它使用内存存储,并且包还提供S3存储引擎。
S3存储引擎
默认情况下,文件存储在内存中,但是这个包也提供了一个基于s3的存储引擎,要使用它,您需要安装 loopback4-s3 包- npm i loopback4-s3 然后你可以在构型属性中给出它 @fileProperty 或者 @file 修饰符。您还需要全局绑定它,如下所示
import {MulterS3Storage} from '@sourceloop/file-utils/s3';
...
// inside component/application constructor
this.service(MulterS3Storage);
文件验证
默认情况下,包提供了两个验证器
FileTypeValidator-根据配置验证文件的类型FileNameValidator-验证文件名,以避免文件名中出现某些特殊字符
您可以编写自己的自定义验证器,并使用 @fileValidator 装饰器,每个验证器必须实现 IFileValidator 界面,
@fileValidator()
export class FileSizeValidator implements IFileValidator {
...
}
ClamAV
该包提供了一个基于ClamAV的验证器,要使用它,您需要安装 clamscan 包- npm i clamscan 然后在应用程序中绑定验证器。这是…
this.service(ClamAVValidator);
限制的配置
的实例来配置多实例 IFileLimitsGetter 在 FileUtilBindings.LimitProvider 关键,
this.bind(FileUtilBindings.LimitProvider).to({
get() {
// this is the default limits in the package
fileSize: FIVE * MB, // 5 MB
files: 1,
}
});
// OR you can use a class or any other type of binding as long as it returns
// an instance of `IFileLimitsGetter-
this.bind(FileUtilBindings.LimitProvider).toClass(MulterConfigService);
您还需要在模型文件中使用以下配置来更新模型装饰器-
@model({
settings: {multer: {limitsProvider: true}},
})
export class TestModel extends Entity {}
贡献
欢迎投稿!请参阅 贡献指南 了解更多信息。
许可证
这个包裹是 麻省理工学院的许可.