@basenative/upload

中文文档
3.0.0发布于 2026/10/31Apache-2.0TypeScriptES Module零依赖构建来源已验证

支持R2和S3适配器的文件上传处理

中文使用文档
文档目录8 节
  1. 安装
  2. 快速入门
  3. S3 / R2
  4. API
  5. parseMultipart(body, contentType)
  6. createUploadHandler(storage, options?)
  7. 存储适配器
  8. 许可证

@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

版本与发布记录

@basenative/upload 共发布 11 个版本,首次发布于 2026/03/20;过去 12 个月发布了 11 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.0.0latest2026/10/312 天前
2.4.02026/10/268 天前
2.3.22026/10/2212 天前
2.3.12026/10/2212 天前
2.3.02026/10/2212 天前
2.2.02026/10/2113 天前

关于 @basenative/upload 的常见问题

@basenative/upload 是什么?

支持R2和S3适配器的文件上传处理

如何安装 @basenative/upload?

在项目目录运行 npm install @basenative/upload,或使用 pnpm add / yarn add / bun add。

@basenative/upload 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@basenative/upload 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@basenative/upload 可以商用吗?

@basenative/upload 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@basenative/upload 还在维护吗?

最新版本 3.0.0 发布于 2026/10/31(2 天前);至今共发布 11 个版本,其中过去 12 个月发布了 11 个;首次发布于 2026/03/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。