はじめに
-
パッケージをインストール
Terminal window npm i @capgo/capacitor-uploaderTerminal window pnpm add @capgo/capacitor-uploaderTerminal window yarn add @capgo/capacitor-uploaderTerminal window bun add @capgo/capacitor-uploader -
ネイティブプロジェクトと同期
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync -
パーミッションを設定
Info.plistにバックグラウンドモードを追加:<key>UIBackgroundModes</key><array><string>processing</string></array>Android
Section titled “Android”AndroidManifest.xmlにパーミッションを追加:<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
プラグインをインポートし、そのメソッドを使用してファイルをアップロード:
import { Uploader } from '@capgo/capacitor-uploader';
// アップロードを開始const startUpload = async () => { const upload = await Uploader.startUpload({ filePath: 'file:///path/to/your/file.jpg', serverUrl: 'https://your-server.com/upload', method: 'POST', headers: { 'Authorization': 'Bearer your-token' }, parameters: { 'userId': '12345', 'type': 'profile' }, notificationTitle: 'Uploading Photo' });
console.log('Upload ID:', upload.id);};
// アップロードイベントをリッスンconst listener = await Uploader.addListener('events', (event) => { switch (event.name) { case 'uploading': console.log(`Upload ${event.payload.id}: ${event.payload.percent}%`); break; case 'completed': console.log('Upload completed:', event.payload.id); console.log('Status code:', event.payload.statusCode); break; case 'failed': console.error('Upload failed:', event.payload.id); console.error('Error:', event.payload.error); break; }});
// 完了したらリスナーを削除することを忘れずに// listener.remove();
// アップロードをキャンセルconst cancelUpload = async (uploadId: string) => { await Uploader.cancelUpload({ id: uploadId });};
// すべてのアクティブなアップロードを取得const getActiveUploads = async () => { const uploads = await Uploader.getUploads(); console.log('Active uploads:', uploads);};APIリファレンス
Section titled “APIリファレンス”startUpload(options)
Section titled “startUpload(options)”新しいファイルアップロードを開始します。
interface UploadOptions { filePath: string; serverUrl: string; method?: 'POST' | 'PUT'; headers?: { [key: string]: string }; parameters?: { [key: string]: string }; notificationTitle?: string; notificationBody?: string; useUtf8Charset?: boolean; maxRetries?: number;}cancelUpload(options)
Section titled “cancelUpload(options)”進行中のアップロードをキャンセルします。
interface CancelOptions { id: string;}getUploads()
Section titled “getUploads()”すべてのアクティブなアップロードを返します。
removeUpload(options)
Section titled “removeUpload(options)”キューからアップロードを削除します。
interface RemoveOptions { id: string;}events
Section titled “events”すべてのアップロードイベントは、単一のeventsリスナーを通じて配信されます。イベントには、タイプを識別するためのnameフィールドが含まれています:
Uploader.addListener('events', (event: UploadEvent) => { switch (event.name) { case 'uploading': // アップロード進行中 console.log(`Progress: ${event.payload.percent}%`); console.log(`ID: ${event.payload.id}`); break;
case 'completed': // アップロード完了 console.log(`Completed: ${event.payload.id}`); console.log(`Status code: ${event.payload.statusCode}`); break;
case 'failed': // アップロード失敗 console.error(`Failed: ${event.payload.id}`); console.error(`Error: ${event.payload.error}`); break; }});イベントタイプ:
uploading-percentとidを含む進行状況の更新completed-idとstatusCodeを含むアップロード完了failed-idとエラーmessageを含むアップロード失敗
マルチパートフォームアップロード
Section titled “マルチパートフォームアップロード”const uploadWithFormData = async () => { const upload = await Uploader.startUpload({ filePath: 'file:///path/to/photo.jpg', serverUrl: 'https://api.example.com/upload', method: 'POST', parameters: { 'name': 'profile-photo', 'description': 'User profile photo' }, headers: { 'X-API-Key': 'your-api-key' } });};バイナリアップロード
Section titled “バイナリアップロード”const uploadBinary = async () => { const upload = await Uploader.startUpload({ filePath: 'file:///path/to/data.bin', serverUrl: 'https://api.example.com/binary', method: 'PUT', headers: { 'Content-Type': 'application/octet-stream' } });};ネットワーク対応アップロード
Section titled “ネットワーク対応アップロード”import { Network } from '@capacitor/network';
const smartUpload = async () => { const status = await Network.getStatus();
if (status.connectionType === 'wifi') { // WiFi上で大きなファイルのアップロードを開始 await startLargeUpload(); } else if (status.connectionType === 'cellular') { // 後でキューに入れるかユーザーに警告 console.log('Using cellular data'); }};ベストプラクティス
Section titled “ベストプラクティス”-
すべてのイベントタイプを処理
const setupUploadHandlers = () => {Uploader.addListener('events', (event) => {switch (event.name) {case 'uploading':handleProgress(event.payload);break;case 'completed':handleCompleted(event.payload);break;case 'failed':handleError(event.payload);break;}});}; -
リスナーをクリーンアップ
// リスナーを追加const listener = await Uploader.addListener('events', handleEvent);// 完了したらクリーンアップlistener.remove(); -
失敗したアップロードを再試行
const retryUpload = async (filePath: string, serverUrl: string) => {try {await Uploader.startUpload({filePath,serverUrl,maxRetries: 3});} catch (error) {console.error('Upload failed after retries:', error);}}; -
アップロード通知を表示
await Uploader.startUpload({filePath: 'file:///path/to/file',serverUrl: 'https://server.com/upload',notificationTitle: 'Uploading File',notificationBody: 'Your file is being uploaded...'});
プラットフォームノート
Section titled “プラットフォームノート”- バックグラウンドアップロードに
URLSessionを使用 - バックグラウンド処理機能が必要
- アプリが一時停止されている間もアップロードを継続
Android
Section titled “Android”- 信頼性の高いアップロードに
WorkManagerを使用 - アップロード中にフォアグラウンドサービス通知を表示
- バッテリー最適化設定を尊重