@capgo/capacitor-uploader

中文文档
8.3.27发布于 2026/11/09MPL-2.0TypeScriptESM + CJS构建来源已验证近 30 天下载 9.2万

本地上传文件

中文使用文档
文档目录22 节
  1. *免费开始*
  2. 主要特点
  3. 上传插件
  4. 文档
  5. 兼容性
  6. 安装
  7. 机器人
  8. iOS系统
  9. 示例 S3 上传
  10. 上传到自定义服务器的示例
  11. 示例多文件多部分上传
  12. 带有相机相机预览的示例
  13. API 密码
  14. iOS 设置
  15. 启动装入(...)
  16. 上传多部分(...)
  17. 删除上载(...)
  18. 添加倾听者( 事件,...)
  19. 确认Event(...)
  20. 获取 PluginVersion ()
  21. 接口
  22. 功劳:

@ capgo/ 电容器加载器

从您的 Capacitor app 上传文件, 并带有本地背景上传, 程序关闭后继续运行, 并进行进度事件和重试 .

Capgo - Build Capacitor apps with AI, ship updates instantly

队长:在几分钟内将修正推给您的 Capacitor 用户,在没有Mac的情况下构建已签名的iOS和Android apps,并在一击中回滚.

*免费开始*

14天无限自由审判. 不需要信用卡

🤖 建筑与AI编码代理? 安装 Capgo 技能 所以克劳德代码,代码,光标,副驾驶,或双子座CLI知道如何安装和使用 @capgo/capacitor-uploader 在您的电容应用程序中: npx skills add Cap-go/capgo-skills。然后问你的经纪人: 添加@capgo/电容-uploader到我的电容软件上并把它接上 代理设置指南 • 妇女 主机磁共振

@capgo/capacitor-uploader for Capacitor apps

主要特点

  • 上传数字 : startUpload() 发送文件与 PUT 或者说 POST,自定义标题和参数.
  • 多块数字 : uploadMultipart() 发送文件为 multipart/form-data。 。 。 .
  • 进展活动页:1 events 听者报告进展、完成和出错.
  • 控制权数字 : removeUpload() 取消上传, maxRetries 重复失败.
  • 背景情况: 背景情况 URLSession 在iOS和上传服务 并通知Android.
  • 平台: iOS,Android和Web. 互联网档案馆的存檔,存档日期2013-12-02. 网络上传 fetch() 在页面打开时,没有本地背景上传.

上传插件

这个插件提供了一个灵活的方法,可以将本地文件上传到各种服务器上,包括带有预先签名的URL的S3.

可用于与 电容相机预览 以可靠的方式上传文件,而不是在网络视图的缓冲器中阅读,然后在JS中上传.

在网络上,文件路径支持使用以下格式的索引DB(IDB)语义路径:
idb://[database-name]/[collection-name]/[key]
这允许与索引DB进行无缝集成,用于存储和检索文件.

文档

这里有最完整的医生: 页:1

兼容性

插件版本电容兼容性维护
联合国联合国✅
页:1页:1应要求
页:1页:1❌
页:1页:1❌

说明: 此插件的主要版本沿用了Capacitor的主要版本. 使用匹配您的 Capacitor 安装的版本( 如 Capacitor 8 的插件 v8) 。 只有最新的主要版本得到积极维护.

安装

您可以使用我们的 AI 辅助设置安装插件 。 使用以下命令将 Capgo 技能添加到您的 AI 工具 :

npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins

然后使用下列提示:

Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-uploader` plugin in my project.

如果您更喜欢手动设置,请通过运行以下命令来安装插件,并遵循下面的平台特定指令:

npm install @capgo/capacitor-uploader
npx cap sync

机器人

在您的 AndroidManifest.xml 文件 :

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

iOS系统

在iOS上,插件通过背景上传 URLSession 使用标识符 CapacitorUploaderBackgroundSession。 。 。 .

上传工作往往没有额外内容 Info.plist 键。 为了让系统在背景传输完成时唤醒您的应用,请添加 fetch 背景模式 :

<key>UIBackgroundModes</key>
<array>
  <string>fetch</string>
</array>

执行 没有 添加 processing 仅此插件的背景模式。 需要 App Store 连接 BGTaskSchedulerPermittedIdentifiers 任何时候 processing 声明,此插件不注册 BGTaskScheduler 任务。 如果您的应用程序已经包含 processing (例如,来自旧文件)和验证失败,加上:

<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
  <string>CapacitorUploaderBackgroundSession</string>
</array>

见 问题115 用于上下文.

示例 S3 上传

import { Uploader } from '@capgo/capacitor-uploader';

async function uploadToS3(filePath: string, presignedUrl: string, fields: Record<string, string>) {
  try {
    const { id } = await Uploader.startUpload({
      filePath: filePath,
      serverUrl: presignedUrl,
      method: 'PUT',
      parameters: fields,
      notificationTitle: 'Uploading to S3'
    });

    console.log('Upload started with ID:', id);

    // Listen for upload events
    Uploader.addListener('events', (event: UploadEvent) => {
      if (event.name === 'uploading') {
        console.log(`Upload progress: ${event.payload.percent}%`);
      } else if (event.name === 'completed') {
        console.log('Upload completed successfully');
      } else if (event.name === 'failed') {
        console.error('Upload failed:', event.payload.error);
      }
    });

  } catch (error) {
    console.error('Failed to start upload:', error);
  }
}

上传到自定义服务器的示例

import { Uploader } from '@capgo/capacitor-uploader';

async function uploadToCustomServer(filePath: string, serverUrl: string) {
  try {
    // Start the upload
    const { id } = await Uploader.startUpload({
      filePath: filePath,
      serverUrl: serverUrl,
      method: 'POST',
      headers: {
        'Authorization': 'Bearer your-auth-token-here'
      },
      parameters: {
        'user_id': '12345',
        'file_type': 'image'
      },
      notificationTitle: 'Uploading to Custom Server',
      maxRetries: 3
    });

    console.log('Upload started with ID:', id);

    // Listen for upload events
    Uploader.addListener('events', (event) => {
      switch (event.name) {
        case 'uploading':
          console.log(`Upload progress: ${event.payload.percent}%`);
          break;
        case 'completed':
          console.log('Upload completed successfully');
          console.log('Server response status code:', event.payload.statusCode);
          break;
        case 'failed':
          console.error('Upload failed:', event.payload.error);
          break;
      }
    });

    // Optional: Remove the upload if needed
    // await Uploader.removeUpload({ id: id });

  } catch (error) {
    console.error('Failed to start upload:', error);
  }
}

// Usage
const filePath = 'file:///path/to/your/file.jpg';
const serverUrl = 'https://your-custom-server.com/upload';
uploadToCustomServer(filePath, serverUrl);

示例多文件多部分上传

import { Uploader } from '@capgo/capacitor-uploader';

const { id } = await Uploader.startUpload({
  serverUrl: 'https://api.example.com/upload',
  method: 'POST',
  uploadType: 'multipart',
  files: [
    { filePath: 'file:///...photo1.jpg', fieldName: 'images[]', mimeType: 'image/jpeg' },
    { filePath: 'file:///...photo2.jpg', fieldName: 'images[]', mimeType: 'image/jpeg' },
  ],
  parameters: { albumId: '7' },
  headers: { Authorization: 'Bearer token' },
});
console.log('Upload started with ID:', id);

带有相机相机预览的示例

联合国文件 电容相机预览

  import { CameraPreview } from '@capgo/camera-preview'
  import { Uploader } from '@capgo/capacitor-uploader';


  async function record() {
    await CameraPreview.startRecordVideo({ storeToFile: true })
    await new Promise(resolve => setTimeout(resolve, 5000))
    const fileUrl = await CameraPreview.stopRecordVideo()
    console.log(fileUrl.videoFilePath)
    await uploadVideo(fileUrl.videoFilePath)
  }

  async function uploadVideo(filePath: string) {
    Uploader.addListener('events', (event) => {
      switch (event.name) {
        case 'uploading':
          console.log(`Upload progress: ${event.payload.percent}%`);
          break;
        case 'completed':
          console.log('Upload completed successfully');
          console.log('Server response status code:', event.payload.statusCode);
          break;
        case 'failed':
          console.error('Upload failed:', event.payload.error);
          break;
      }
    });
    try {
      const result = await Uploader.startUpload({
        filePath,
        serverUrl: 'S#_PRESIGNED_URL',
        method: 'PUT',
        headers: {
          'Content-Type': 'video/mp4',
        },
        mimeType: 'video/mp4',
      });
      console.log('Video uploaded successfully:', result.id);
    } catch (error) {
      console.error('Error uploading video:', error);
      throw error;
    }
  }

API 密码

用于上传带有背景支持和进度跟踪的文件的电容上传插件 .

iOS 设置

在iOS上,原生地层使用背景 URLSession 带有标识符 CapacitorUploaderBackgroundSession。许多应用程序可以在不添加的情况下上传 UIBackgroundModes; 添加 fetch 应用程序后需要上传时继续 暂停.

App Store 连接拒绝构建声明 UIBackgroundModes → processing 无 BGTaskSchedulerPermittedIdentifiers。此插件没有排程 BGTaskScheduler 工作,所以避开 processing 除非其他特性需要它. 若为 processing 存在(例如,来自旧的设置指南),包括 CapacitorUploaderBackgroundSession 内 BGTaskSchedulerPermittedIdentifiers 在你的应用软件 Info.plist。 。 。 .

启动装入(...)

startUpload(options: uploadOption) => Promise<{ id: string; }>

开始上传文件到服务器 .

即使应用程序关闭或背景化,上传也会在背景中继续. 听上传事件跟踪进度,完成或失败.

参数类型说明
optionsuploadOption- 上传配置

回返情况: Promise<{ id: string; }>

自: 0.0.1 资源


上传多部分(...)

uploadMultipart(options: UploadMultipartOptions) => Promise<{ id: string; }>

开始上传单个文件为多段/窗体-数据.

这是一个方便的 API,用于后端,期望一个命名的文件字段和 额外的窗体字段。 现有 startUpload 二进制上传不变.

参数类型说明
optionsUploadMultipartOptions- 多部分上传的配置

回返情况: Promise<{ id: string; }>

自: 8.3.2 国家


删除上载(...)

removeUpload(options: { id: string; }) => Promise<void>

取消并删除正在进行的上传 .

这将停止上传,如果它正在进行,并清理资源.

参数类型说明
options{ id: string; }- 包含要删除的上传ID的对象

自: 0.0.1 资源


添加倾听者( 事件,...)

addListener(eventName: 'events', listenerFunc: (state: UploadEvent) => void) => Promise<PluginListenerHandle>

听上传进度和状态事件.

活动为:

  • 上传进度更新( 含百分比)
  • 上传完成( 有状态代码)
  • 上传失败( 有错误和状态代码)
参数类型说明
eventName'events'- 一定是"活动"
listenerFunc(state: UploadEvent) => void- 处理上传事件的回调功能

回返情况: Promise<PluginListenerHandle>

自: 0.0.1 资源


确认Event(...)

acknowledgeEvent(options: { eventId: string; }) => Promise<void>

确认收到上传事件, 从插件缓存中删除 .

已完成和失败的事件被存储在插件的持久缓存中, 以便它们成为 如果应用程序在事件处理前关闭或背景化,则重新交付. 在成功处理“ 完成的” 或“ 失败的” 事件后调用此方法以预防 它从下次插件时重播开始.

进步( “ 上载 ” ) 事件没有事件标识, 不需要承认 .

参数类型说明
options{ eventId: string; }- 包含事件的对象,需要确认

自: 0.0.2 (中文(简体) )


获取 PluginVersion ()

getPluginVersion() => Promise<{ version: string; }>

获取本地 Capacitor 插件版本 .

回返情况: Promise<{ version: string; }>

自: 0.0.1 资源


接口

上传选项

Prop类型说明默认自兹
filePathstring要上传的文件的本地文件路径 。 可以是文件://URL或绝对路径. 如果您需要在一个多段请求中上传多个文件, 请使用 files。 。 。 .0.0.1 资源
filesUploadFileOption[]在单个请求中上传多个文件 。 提供后,上传为 multipart/form-data 每个文件有一个部分。 使用 fieldName 以控制每个部分的名称(例如). images[]) (中文(简体) ). 说明: PUT 上传(如被预先签名的S3 URL)只支持一个文件.0.0.3 经常预算:
serverUrlstring上传文件的服务器 URL 端点 .0.0.1 资源
notificationTitlestring向用户显示的上传通知的标题 。 仅限Android.'Uploading'0.0.1 资源
headers{ [key: string]: string; }HTTP 头随上传请求一起发送. 可用于认证符,内容类型等.0.0.1 资源
method'PUT' | 'POST'用于上传请求的 HTTP 方法 .'POST'0.0.1 资源
mimeTypestring正在上传的文件的 MIME 类型 。 如果没有指定,插件将尝试自动确定 .0.0.1 资源
parameters{ [key: string]: string; }附加表单参数随上传请求一起发送. 这些将作为形式数据列入多段上传.0.0.1 资源
maxRetriesnumber如果上传失败, 重试的最大次数 .00.0.1 资源
uploadType'binary' | 'multipart'要执行的上传类型 。 - “ 二进制”:将文件上传为请求正文中的原始二进制数据 - “多部分” : 上传文件为多部分/ 窗体数据'binary' when method is 'PUT', otherwise 'multipart'0.0.2 (中文(简体) )
fileFieldstring使用多段上传类型时的文件窗体字段名。 仅在上传Type为"多部分"时使用. 多文件上传 files,在文件条目未指定时,此字段名称被用作默认字段名称 fieldName。 。 。 .'file'0.0.2 (中文(简体) )

上传文件选项

上传文件的配置选项 .

Prop类型说明自兹
filePathstring要上传的文件的本地文件路径 。 可以是文件://URL或绝对路径.0.0.3 经常预算:
fieldNamestring使用多段上传时的文件部分的窗体字段名称 。 如果省略,则, uploadOption.fileField 被使用(默认为 'file') (中文(简体) ).0.0.3 经常预算:
mimeTypestring此文件的 MIME 类型 。 如果没有指定,插件将尝试自动确定 .0.0.3 经常预算:

上传多部分选项

启动单文件多段上传的选项 .

Prop类型说明自兹
urlstring发送多段请求的服务器 URL 端点 .8.3.2 国家
filePathstring要上传的文件的本地文件路径 。 可以是文件://URL或绝对路径.8.3.2 国家
fieldNamestring上传文件部分的窗体字段名称 .8.3.2 国家
fields{ [key: string]: string; }多段请求中要包含的额外窗体字段 .8.3.2 国家
headers{ [key: string]: string; }HTTP 头随上传请求一起发送.8.3.2 国家

插件听筒

Prop类型
remove() => Promise<void>

上传事件

上传生命周期中排放出的事件 .

Prop类型说明自兹
name'uploading' | 'completed' | 'failed'上传状态 。 - “上载”:上传中 - “完成” : 上传成功 - “ 失败 ” : 上传遇到错误0.0.1 资源
payload{ percent?: number; error?: string; statusCode?: number; }关于上传事件的附加数据.0.0.1 资源
idstring此上传任务的独特标识符 .0.0.1 资源
eventIdstring此特定事件实例的独特标识符 。 只出现在"完成"和"失败"的事件上. 用于确认收到并删除插件缓存中的事件 。 进步("上载")事件没有事件Id,并且没有持续.0.0.2 (中文(简体) )

功劳:

Ios上的灵感和代码: https://github.com/Vydia/ react-native-background-upload/tree/master 页面存档备份,存于互联网档案馆 API定义: https://www.npmjs.com/package/cordova-plugin-background-upload-put-s3 互联网档案馆的存檔,存档日期2014-12-21

版本与发布记录

@capgo/capacitor-uploader 共发布 129 个版本,首次发布于 2024/09/04;过去 12 个月发布了 79 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
8.3.27latest2026/11/09今天
8.3.262026/10/1525 天前
8.3.252026/10/1327 天前
8.3.242026/10/1228 天前
8.3.232026/10/091 个月前
8.3.222026/10/091 个月前

关于 @capgo/capacitor-uploader 的常见问题

@capgo/capacitor-uploader 是什么?

本地上传文件

如何安装 @capgo/capacitor-uploader?

在项目目录运行 npm install @capgo/capacitor-uploader,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@capacitor/core(>=8.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@capgo/capacitor-uploader 支持 TypeScript 吗?

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

@capgo/capacitor-uploader 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@capgo/capacitor-uploader 可以商用吗?

@capgo/capacitor-uploader 使用 MPL-2.0 许可。弱 Copyleft:可以商用,也可以和闭源代码一起使用;但如果分发时修改了 MPL 授权的文件,这些文件的修改需以 MPL 开源。以上为概括,不构成法律意见,请以许可原文为准。

@capgo/capacitor-uploader 的下载量有多少?

根据 npm 官方下载统计,@capgo/capacitor-uploader 在 2026/10/09 – 2026/11/07 这 30 天内被下载 92,186 次,日均约 3,073 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@capgo/capacitor-uploader 还在维护吗?

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