@basenative/upload

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

File upload handling with R2 and S3 adapter support

原始使用文档
文档目录8 节
  1. Install
  2. Quick Start
  3. S3 / R2
  4. API
  5. parseMultipart(body, contentType)
  6. createUploadHandler(storage, options?)
  7. Storage Adapters
  8. License

@basenative/upload

File upload middleware with local, S3, and Cloudflare R2 storage adapters

Part of the BaseNative ecosystem — a signal-based web runtime over native HTML.

Install

npm install @basenative/upload

Quick Start

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)

Parses a multipart/form-data request body. Returns an array of part objects: { name, filename, contentType, data, size }.

createUploadHandler(storage, options?)

Creates an upload middleware. Options:

  • maxFileSize — Maximum file size in bytes (default: 10 MB).
  • allowedTypes — Array of allowed MIME types (empty = all allowed).
  • fieldName — Form field name to read (default: 'file').
  • generateFilename(original) — Function to generate a storage filename. Default: 16-byte hex prefix + original name.

After the middleware runs, ctx.state.uploads contains an array of { field, filename, url, size, contentType } objects.

Storage Adapters

  • createLocalStorage(options) — Stores files on the local filesystem. Options: directory.
    • .put(filename, data, contentType) — Stores a file. Returns { url }.
    • .delete(filename) — Deletes a file.
  • createS3Storage(options) — Stores files in AWS S3. Options: bucket, region, accessKeyId, secretAccessKey, prefix.
  • createR2Storage(options) — Stores files in Cloudflare R2. Options: binding (the R2 binding from Workers env), prefix.

License

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 和提交记录判断。