@capacitor/file-transfer
FileTransfer API 提供了下载和上传文件的机制。
安装
npm install @capacitor/file-transfer
npx cap sync
示例
下载
import { FileTransfer } from '@capacitor/file-transfer';
import { Filesystem, Directory } from '@capacitor/filesystem';
// 首先使用 Filesystem 获取完整的文件路径
const fileInfo = await Filesystem.getUri({
directory: Directory.Data,
path: 'downloaded-file.pdf'
});
try {
// 然后使用 FileTransfer 插件进行下载
await FileTransfer.downloadFile({
url: 'https://example.com/file.pdf',
path: fileInfo.uri,
progress: true
});
} catch(error) {
if (error.code === 'OS-PLUG-FLTR-0010') {
// HTTP 错误 - 有关 `errorData` 中可用字段的详细信息,请参阅 `FileTransferError`
let errorData = error.data;
this.showError('上传失败: ' + errorData.httpStatus + '; ' + errorData.body);
} else {
// 其他错误 - 使用 `error.code` 和 `error.message` 获取更多信息。
this.showError('上传失败: ' + error.code + '; ' + error.message);
}
}
// 进度事件
FileTransfer.addListener('progress', (progress) => {
console.log(`已下载 ${progress.bytes} / ${progress.contentLength}`);
});
上传
import { FileTransfer } from '@capacitor/file-transfer';
import { Filesystem, Directory } from '@capacitor/filesystem';
// 首先使用 Filesystem 获取完整的文件路径
const fileInfo = await Filesystem.getUri({
directory: Directory.Cache,
path: 'image_upload.png'
});
try {
// 然后使用 FileTransfer 插件进行上传
const result = await FileTransfer.uploadFile({
url: 'https://example.com/upload_api',
path: fileInfo.uri,
chunkedMode: true,
headers: {
// 上传默认使用 `multipart/form-data`。
// 如果你想避免这种情况,可以显式设置 'Content-Type' 请求头。
'Content-Type': 'application/octet-stream',
},
progress: false
});
// 从 result 中获取服务器响应和其他信息 - 请参阅 `UploadFileResult` 接口
} catch(error) {
if (error.code === 'OS-PLUG-FLTR-0010') {
// HTTP 错误 - 有关 `errorData` 中可用字段的详细信息,请参阅 `FileTransferError`
let errorData = error.data;
this.showError('上传失败: ' + errorData.httpStatus + '; ' + errorData.body);
} else {
// 其他错误 - 使用 `error.code` 和 `error.message` 获取更多信息。
this.showError('上传失败: ' + error.code + '; ' + error.message);
}
}
API
注意:部分输入选项来自 @capacitor/core 中的 HttpOptions,但本插件并未使用 HttpOptions 中的所有参数。下面记录了所使用的参数。
有关现有错误代码的列表,请参阅 错误。
downloadFile(...)
downloadFile(options: DownloadFileOptions) => Promise<DownloadFileResult>
向服务器执行 HTTP 请求并将文件下载到指定目标。
如果服务器返回 HTTP 错误(例如 404、500 等),Promise 将被拒绝。
要在 Android 和 iOS 上(不适用于 Web)获取有关 HTTP 错误响应的信息,请使用 error.data 属性中可用的 FileTransferError 接口。
| 参数 | 类型 |
|---|---|
options | |
返回值:
Promise<DownloadFileResult>
起始版本: 1.0.0
uploadFile(...)
uploadFile(options: UploadFileOptions) => Promise<UploadFileResult>
向服务器执行 HTTP 请求以上传文件。
如果服务器返回 HTTP 错误(例如 404、500 等),Promise 将被拒绝。
要在 Android 和 iOS 上(不适用于 Web)获取有关 HTTP 错误响应的信息,请使用 error.data 属性中可用的 FileTransferError 接口。
| 参数 | 类型 |
|---|---|
options | |
返回值:
Promise<UploadFileResult>
起始版本: 1.0.0
addListener('progress', ...)
addListener(eventName: "progress", listenerFunc: (progress: ProgressStatus) => void) => Promise<PluginListenerHandle>
添加文件传输(下载或上传)进度事件的监听器。
| 参数 | 类型 |
|---|---|
eventName | 'progress' |
listenerFunc | |
返回值:
Promise<PluginListenerHandle>
起始版本: 1.0.0
removeAllListeners()
removeAllListeners() => Promise<void>
移除此插件的所有监听器。
起始版本: 1.0.0
接口
DownloadFileResult
| 属性 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
path | string | 文件下载到的路径。 | 1.0.0 |
blob | Blob |