Tous les produits
Search
Centre de documentation

Object Storage Service:Téléchargement avec reprise (SDK iOS)

Dernière mise à jour :Aug 18, 2026

Le téléchargement de fichiers volumineux via un réseau sans fil peut prendre beaucoup de temps. Des conditions réseau médiocres ou des changements de réseau peuvent entraîner l'échec du téléchargement. En cas d'échec, vous devez renvoyer l'intégralité du fichier. Pour résoudre ce problème, le kit de développement logiciel (SDK) iOS propose une fonctionnalité de téléchargement avec reprise.

Contexte

Nous vous déconseillons d'utiliser le téléchargement avec reprise pour les objets inférieurs à 5 Go depuis un appareil mobile. Cette fonctionnalité s'appuie sur le téléchargement en plusieurs parties. Le téléchargement avec reprise d'un seul objet nécessite plusieurs requêtes réseau, ce qui est inefficace. Lors du téléchargement avec reprise d'un objet supérieur à 5 Go, tenez compte des points suivants :

  • Avant le téléchargement avec reprise

    Avant de télécharger un objet vers OSS via un téléchargement avec reprise, spécifiez un répertoire pour le fichier de point de contrôle qui enregistre la progression du téléchargement. Ce fichier de point de contrôle s'applique uniquement à la tâche de téléchargement avec reprise en cours.

    • Si vous ne spécifiez pas le répertoire du fichier de point de contrôle et qu'une partie d'un objet volumineux échoue en raison de problèmes réseau, le renvoi intégral de l'objet prendra beaucoup de temps et consommera une grande quantité de trafic.

    • Si vous spécifiez le répertoire du fichier de point de contrôle, une tâche de téléchargement avec reprise ayant échoué reprend à partir de la position enregistrée dans le fichier de point de contrôle.

  • Pendant un téléchargement avec reprise

    • Le téléchargement avec reprise permet de télécharger uniquement des fichiers locaux. Il prend en charge la fonction de rappel de téléchargement, utilisée de la même manière que dans les tâches de téléchargement classiques. Pour plus d'informations, consultez la section Rappel.

    • Effectuez un téléchargement avec reprise en appelant les opérations API suivantes : InitMultipartUpload, UploadPart, ListParts, CompleteMultipartUpload et AbortMultipartUpload. Si vous souhaitez utiliser le service STS (Security Token Service) pour le téléchargement avec reprise, assurez-vous d'être autorisé à appeler les opérations API mentionnées ci-dessus.

    • Par défaut, la validation MD5 est activée pour chaque partie lors d'un téléchargement avec reprise. Vous n'avez donc pas besoin de définir l'en-tête Content-Md5 dans la requête.

    • Si une tâche ne peut pas reprendre pendant une longue période, des téléchargements multiparties incomplets peuvent s'accumuler dans OSS. Configurez des règles de cycle de vie pour le bucket afin de supprimer périodiquement ces parties. Pour plus d'informations, consultez la section Gestion du cycle de vie.

      Important

      Si vous annulez une tâche de téléchargement avec reprise, les parties déjà téléchargées sur le serveur sont supprimées par défaut. Pour conserver les enregistrements de point d'arrêt lors de l'annulation d'une tâche, spécifiez un dossier pour ces enregistrements et modifiez le paramètre deleteUploadIdOnCancelling. Si le serveur conserve les enregistrements pendant une période prolongée et qu'une règle de cycle de vie supprime les parties du serveur, une incohérence peut apparaître entre les enregistrements du serveur et ceux du client mobile.

Notes

  • Avant d'utiliser les exemples de cette rubrique, créez un OSSClient en utilisant un nom de domaine personnalisé ou le service STS (Security Token Service). Pour plus d'informations, consultez la section Initialisation (SDK iOS).

    Remarque

    La région du bucket est déterminée par l'endpoint spécifié dans la configuration d'initialisation.

  • Pour télécharger un fichier, vous devez disposer de l'autorisation oss:PutObject. Pour plus d'informations, consultez la section Accorder des politiques d'accès personnalisées à un utilisateur RAM.

Exemple de code

  • Pour enregistrer localement les enregistrements de point d'arrêt, appelez la méthode resumableUpload pour effectuer un téléchargement avec reprise comme suit :

    OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];
    resumableUpload.bucketName = OSS_BUCKET_PRIVATE;
    //...
    NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    resumableUpload.recordDirectoryPath = cachesDir;
                        
    Remarque

    En cas d'échec d'un téléchargement avec reprise, un fichier d'enregistrement de point d'arrêt est créé. Le téléchargement reprend alors à partir du point d'arrêt jusqu'à son achèvement. Une fois le téléchargement réussi, le fichier d'enregistrement de point d'arrêt est automatiquement supprimé. Par défaut, les enregistrements de point d'arrêt ne sont pas sauvegardés localement.

  • Le code suivant fournit un exemple complet de téléchargement avec reprise :

    // Obtain the UploadId to upload the file.
    OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];
    resumableUpload.bucketName = <bucketName>;
    // objectKey is the same as objectName. It specifies the full path of the object that you want to upload to OSS, including the file extension. For example, 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];
    // Set the path to save the breakpoint record.
    resumableUpload.recordDirectoryPath = cachesDir;
    // Set the deleteUploadIdOnCancelling parameter to NO. This indicates that the breakpoint record file is not deleted. If the upload fails, the upload resumes from the breakpoint until the file is completely uploaded. If you do not set this parameter, the default value YES is used. This indicates that the breakpoint record file is deleted. The next time you upload the same file, the upload starts from the beginning.
    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) {
                // This task cannot be resumed. You must obtain a new uploadId to re-upload the file.
            }
        } else {
            NSLog(@"Upload file success");
        }
        return nil;
    }];
    
    // [resumeTask waitUntilFinished];
    
    // [resumableUpload cancel];