Mengunggah file besar melalui jaringan nirkabel dapat memakan waktu lama. Kondisi jaringan yang buruk atau perubahan jaringan dapat menyebabkan unggahan gagal, sehingga seluruh file harus diunggah ulang. Untuk mengatasi hal ini, kit pengembangan perangkat lunak (SDK) iOS menyediakan fitur unggah yang dapat dilanjutkan.
Informasi latar belakang
Kami menyarankan agar Anda tidak menggunakan unggah yang dapat dilanjutkan saat mengunggah objek berukuran kurang dari 5 GB dari perangkat seluler. Fitur ini diimplementasikan menggunakan unggah multi-bagian dan memerlukan beberapa permintaan jaringan untuk satu objek, sehingga kurang efisien. Jika Anda mengunggah objek berukuran lebih dari 5 GB dengan unggah yang dapat dilanjutkan, perhatikan hal-hal berikut:
Sebelum unggah yang dapat dilanjutkan
Sebelum mengunggah objek ke OSS menggunakan unggah yang dapat dilanjutkan, Anda dapat menentukan direktori untuk file titik pemeriksaan yang menyimpan progres unggahan. File titik pemeriksaan hanya berlaku untuk tugas unggah yang dapat dilanjutkan saat ini.
Jika Anda tidak menentukan direktori untuk file titik pemeriksaan dan sebagian objek besar gagal diunggah karena masalah jaringan, diperlukan waktu lama serta konsumsi traffic yang besar untuk mengunggah ulang seluruh objek.
Jika Anda menentukan direktori untuk file titik pemeriksaan, tugas unggah yang gagal dapat dilanjutkan dari posisi yang dicatat dalam file tersebut.
Saat unggah yang dapat dilanjutkan
Unggah yang dapat dilanjutkan hanya mendukung pengunggahan file lokal dan menyediakan callback unggahan yang digunakan sama seperti pada tugas unggahan biasa. Untuk informasi selengkapnya, lihat Callback.
Anda dapat melakukan unggah yang dapat dilanjutkan dengan memanggil operasi API berikut: InitMultipartUpload, UploadPart, ListParts, CompleteMultipartUpload, dan AbortMultipartUpload. Jika Anda ingin menggunakan Security Token Service (STS), pastikan Anda memiliki otorisasi untuk memanggil operasi API tersebut.
Secara default, validasi MD5 diaktifkan untuk setiap bagian selama unggah yang dapat dilanjutkan, sehingga Anda tidak perlu menyetel header
Content-Md5dalam permintaan.Jika suatu tugas tidak dilanjutkan dalam waktu lama, unggahan multi-bagian yang belum lengkap dapat menumpuk di OSS. Anda dapat mengatur aturan siklus hidup untuk bucket guna menghapus bagian-bagian tersebut secara berkala. Untuk informasi selengkapnya, lihat Manajemen lifecycle.
PentingJika Anda membatalkan tugas unggah yang dapat dilanjutkan, bagian-bagian yang telah diunggah ke server akan dihapus secara default. Untuk menyimpan catatan breakpoint saat pembatalan, Anda harus menentukan folder penyimpanan dan mengubah parameter deleteUploadIdOnCancelling. Jika server menyimpan catatan tersebut dalam periode yang lama dan aturan siklus hidup menghapus bagian-bagian tersebut, catatan di server dan klien seluler mungkin menjadi tidak konsisten.
Catatan penggunaan
Sebelum menggunakan contoh dalam topik ini, Anda harus membuat OSSClient menggunakan nama domain kustom atau Security Token Service (STS). Untuk informasi selengkapnya, lihat Inisialisasi (iOS SDK).
CatatanWilayah bucket ditentukan oleh titik akhir yang dikonfigurasi saat inisialisasi.
Untuk mengunggah file, Anda harus memiliki izin
oss:PutObject. Untuk informasi selengkapnya, lihat Berikan kebijakan akses kustom kepada RAM user.
Kode contoh
Untuk menyimpan catatan breakpoint secara lokal, Anda dapat memanggil metode
resumableUploaduntuk melakukan unggah yang dapat dilanjutkan sebagai berikut:OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new]; resumableUpload.bucketName = OSS_BUCKET_PRIVATE; //... NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; resumableUpload.recordDirectoryPath = cachesDir;CatatanJika unggah yang dapat dilanjutkan gagal, file catatan breakpoint akan dibuat. Unggahan kemudian dilanjutkan dari breakpoint tersebut hingga selesai. Setelah berhasil, file catatan breakpoint akan dihapus secara otomatis. Secara default, catatan breakpoint tidak disimpan secara lokal.
Kode berikut memberikan contoh lengkap unggah yang dapat dilanjutkan:
// Dapatkan UploadId untuk mengunggah file. OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new]; resumableUpload.bucketName = <bucketName>; // objectKey sama dengan objectName. Ini menentukan path lengkap objek yang ingin Anda unggah ke OSS, termasuk ekstensi file. Contohnya, abc/efg/123.jpg. resumableUpload.objectKey = <objectKey>; resumableUpload.partSize = 1024 * 1024; resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) { NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend); }; NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; // Tetapkan path untuk menyimpan catatan breakpoint. resumableUpload.recordDirectoryPath = cachesDir; // Atur parameter deleteUploadIdOnCancelling ke NO. Ini menunjukkan bahwa file catatan breakpoint tidak dihapus. Jika unggahan gagal, unggahan dilanjutkan dari breakpoint hingga file sepenuhnya diunggah. Jika Anda tidak mengatur parameter ini, nilai default YES akan digunakan. Ini berarti file catatan breakpoint dihapus. Saat Anda mengunggah file yang sama berikutnya, unggahan dimulai dari awal. resumableUpload.deleteUploadIdOnCancelling = NO; resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>]; OSSTask * resumeTask = [client resumableUpload:resumableUpload]; [resumeTask continueWithBlock:^id(OSSTask *task) { if (task.error) { NSLog(@"error: %@", task.error); if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) { // Tugas ini tidak dapat dilanjutkan. Anda harus mendapatkan uploadId baru untuk mengunggah ulang file. } } else { NSLog(@"Unggah file berhasil"); } return nil; }]; // [resumeTask waitUntilFinished]; // [resumableUpload cancel];