@basenative /上传
带有本地、S3和Cloudflare R2存储适配器的文件上传中间件
部分 BaseNative 生态系统——基于信号的web运行时,基于原生HTML。
安装
npm install @basenative/upload
快速入门
import { createUploadHandler, createLocalStorage } from '@basenative/upload';
import { createPipeline } from '@basenative/middleware';
const storage = createLocalStorage({ directory: './uploads' });
const upload = createUploadHandler(storage, {
maxFileSize: 5 * 1024 * 1024, // 5 MB
allowedTypes: ['image/jpeg', 'image/png', 'image/webp'],
fieldName: 'avatar',
});
const pipeline = createPipeline().use(upload);
// ctx.state.uploads contains the uploaded file metadata
S3 / R2
import { createS3Storage } from '@basenative/upload';
const storage = createS3Storage({
bucket: 'my-bucket',
region: 'us-east-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
});
// For Cloudflare R2
import { createR2Storage } from '@basenative/upload';
const storage = createR2Storage({ binding: env.MY_BUCKET });
API
parseMultipart(body, contentType)
解析一个 multipart/form-data 请求主体。返回零件对象的数组:
{ name, filename, contentType, data, size }.
createUploadHandler(storage, options?)
创建一个上传中间件。选项:
maxFileSize-最大文件大小 (以字节为单位) (默认值: 10 MB)。allowedTypes-允许的MIME类型的数组 (空 = 所有允许)。fieldName-要读取的表单字段名(默认:'file')。generateFilename(original)-生成存储文件名的功能。默认值:16字节十六进制前缀+原始名称。
中间件运行后, ctx.state.uploads 包含的数组 { field, filename, url, size, contentType } 对象。
存储适配器
createLocalStorage(options)—将文件存储在本地文件系统上。选项:directory..put(filename, data, contentType)-存储文件。返回{ url }..delete(filename)—删除文件。
createS3Storage(options)-将文件存储在AWS s3中。选项:bucket,region,accessKeyId,secretAccessKey,prefix.createR2Storage(options)—在Cloudflare R2中存储文件。选项:binding(来自工作程序env的R2绑定),prefix.
许可证
apache - 2.0