跳转到正文

快速入门

GitHub

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

终端窗口
npx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-plugins

然后使用以下 prompt:

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

如果你更想手动设置,请运行以下命令安装插件,并按照下方各平台的说明操作:

终端窗口
bun add @capgo/capacitor-uploader
bunx cap sync
import { Uploader } from '@capgo/capacitor-uploader';

开始上传并订阅 events,同时追踪返回的上传 id.

import { Uploader } from '@capgo/capacitor-uploader';
let uploadId = '';
const listener = await Uploader.addListener('events', async (event) => {
if (event.id !== uploadId) return;
if (event.name === 'uploading') {
console.log(event.payload.percent);
}
if (event.name === 'completed' || event.name === 'failed') {
if (event.eventId) {
await Uploader.acknowledgeEvent({ eventId: event.eventId });
}
await listener.remove();
}
});
const { id } = await Uploader.startUpload({
filePath: 'file:///data/user/0/.../scan.jpg',
serverUrl: 'https://api.example.com/v1/assets',
method: 'POST',
headers: { Authorization: 'Bearer token' },
maxRetries: 3,
});
uploadId = id;

PUT 上传仅支持单个文件。请将预签名 URL 作为 serverUrl 并设置 method: 'PUT'.

await Uploader.startUpload({
filePath: capturedUri,
serverUrl: presignedUrl,
method: 'PUT',
headers: { 'Content-Type': 'image/jpeg' },
});

示例:包含额外字段的 multipart 表单

标题为“示例:带有额外字段的分段表单”的部分
await Uploader.uploadMultipart({
url: 'https://api.example.com/upload',
filePath: localPath,
fieldName: 'file',
fields: { userId: '42', kind: 'receipt' },
headers: { Authorization: 'Bearer token' },
});
  • 多个文件:使用 files 数组来 startUpload 进行单个 multipart 请求。 PUT 无法发送多个 body。
  • Web 后台:如果用户关闭标签页,上传将会停止。如果需要在应用进入后台时仍能完成上传,请使用 native 平台。
  • 取消: 调用 removeUpload({ id }) 配合来自 startUpload.
  • 进度:务必在开始前绑定 events 监听器,否则可能会错过早期的进度信息。

开始向服务器上传文件。

即使应用被关闭或进入后台,上传仍会在后台继续进行。 通过监听上传事件来跟踪进度、完成状态或失败情况。

import { Uploader } from '@capgo/capacitor-uploader';
const { id } = await Uploader.startUpload({
filePath: 'file:///path/to/file.jpg',
serverUrl: 'https://example.com/upload',
headers: {
'Authorization': 'Bearer token'
},
method: 'POST',
uploadType: 'multipart',
fileField: 'photo'
});
console.log('Upload started with ID:', id);

取消并移除正在进行的上传。

如果上传正在进行,此操作将停止上传并清理资源。

import { Uploader } from '@capgo/capacitor-uploader';
await Uploader.removeUpload({ id: 'upload-123' });

文件上传的配置选项。

export interface uploadOption {
/**
* The local file path of the file to upload.
* Can be a file:// URL or an absolute path.
*
* @since 0.0.1
*/
filePath: string;
/**
* The server URL endpoint where the file should be uploaded.
*
* @since 0.0.1
*/
serverUrl: string;
/**
* The title of the upload notification shown to the user.
* Android only.
*
* @default 'Uploading'
* @since 0.0.1
*/
notificationTitle?: string;
/**
* HTTP headers to send with the upload request.
* Useful for authentication tokens, content types, etc.
*
* @since 0.0.1
* @example
* ```typescript
* headers: {
* 'Authorization': 'Bearer token123',
* 'X-Custom-Header': 'value'
* }
* ```
*/
headers: {
[key: string]: string;
};
/**
* The HTTP method to use for the upload request.
*
* @default 'POST'
* @since 0.0.1
*/
method?: 'PUT' | 'POST';
/**
* The MIME type of the file being uploaded.
* If not specified, the plugin will attempt to determine it automatically.
*
* @since 0.0.1
* @example 'image/jpeg', 'application/pdf', 'video/mp4'
*/
mimeType?: string;
/**
* Additional form parameters to send with the upload request.
* These will be included as form data in multipart uploads.
*
* @since 0.0.1
*/
parameters?: { [key: string]: string };
/**
* The maximum number of times to retry the upload if it fails.
*
* @since 0.0.1
* @default 0
*/
maxRetries?: number;
/**
* The type of upload to perform.
* - 'binary': Uploads the file as raw binary data in the request body
* - 'multipart': Uploads the file as multipart/form-data
*
* @default 'binary'
* @since 0.0.2
*/
uploadType?: 'binary' | 'multipart';
/**
* The form field name for the file when using multipart upload type.
* Only used when uploadType is 'multipart'.
*
* @default 'file'
* @since 0.0.2
*/
fileField?: string;
}

上传生命周期中触发的事件。

export interface UploadEvent {
/**
* The current status of the upload.
* - 'uploading': Upload is in progress
* - 'completed': Upload finished successfully
* - 'failed': Upload encountered an error
*
* @since 0.0.1
*/
name: 'uploading' | 'completed' | 'failed';
/**
* Additional data about the upload event.
*
* @since 0.0.1
*/
payload: {
/**
* Upload progress percentage from 0 to 100.
* Only present during 'uploading' events.
*
* @since 0.0.1
*/
percent?: number;
/**
* Error message if the upload failed.
* Only present during 'failed' events.
*
* @since 0.0.1
*/
error?: string;
/**
* HTTP status code returned by the server.
* Present during 'completed' and 'failed' events.
*
* @since 0.0.1
*/
statusCode?: number;
};
/**
* Unique identifier for this upload task.
*
* @since 0.0.1
*/
id: string;
}

本页面由插件的 src/definitions.ts生成。当上游的公共 API 发生变化时,请重新运行 sync。

如果你正在使用 快速入门 要规划 dashboard 和 API 操作,请将其连接到 使用 @capgo/capacitor-uploader 在使用 @capgo/capacitor-uploader 时,获取 Native 能力的方法: API 概览 关于 API Overview 中的实现细节, 简介 关于 Introduction 中的实现细节, API 密钥 有关 API Keys 的实现细节,以及 设备 有关 Devices 的实现细节。