Cette rubrique explique comment télécharger un fichier depuis la mémoire ou à partir d'un fichier local. Vous pouvez également utiliser la validation MD5 pour garantir l'intégrité des données pendant le téléchargement.
Notes
Avant d'utiliser l'exemple de code présenté dans cette rubrique, créez une instance OSSClient en utilisant un nom de domaine personnalisé ou Security Token Service (STS). Pour plus d'informations, consultez la page Initialisation (SDK iOS).
La région du bucket dépend de l'endpoint spécifié lors de l'initialisation.
Permissions
Par défaut, un compte Alibaba Cloud dispose de toutes les autorisations. Les utilisateurs RAM ou les rôles RAM associés à un compte Alibaba Cloud ne disposent d'aucune autorisation par défaut. Le compte Alibaba Cloud ou l'administrateur du compte doit accorder les autorisations d'opération via les politiques RAM ou la Bucket Policy.
|
API |
Action |
Description |
|
PutObject |
|
Télécharge un objet. |
|
|
Requis si vous spécifiez des tags d'objet à l'aide de l'en-tête |
|
|
|
Requis si l'en-tête |
|
|
|
Télécharger un fichier depuis la mémoire ou un fichier local
Lorsque vous téléchargez un fichier, vous pouvez directement télécharger OSSData ou utiliser un NSURL pour télécharger le fichier.
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// Specify the bucket name. For example, examplebucket.
put.bucketName = @"examplebucket";
// Specify the full path of the object. For example, exampledir/exampleobject.txt. The full path cannot contain the bucket name.
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// put.uploadingData = <NSData *>; // Directly upload NSData.
// (Optional) Set the upload progress.
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// The current upload length, the total uploaded length, and the total length to upload.
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
// Configure optional fields.
// put.contentType = @"application/octet-stream";
// Set Content-MD5.
// put.contentMd5 = @"eB5eJF1ptWaXm4bijSPyxw==";
// Set the codec of the object.
// put.contentEncoding = @"identity";
// Set the display format of the object.
// put.contentDisposition = @"attachment";
// You can set object metadata or HTTP headers when you upload a file.
// NSMutableDictionary *meta = [NSMutableDictionary dictionary];
// Set the file metadata.
// [meta setObject:@"value" forKey:@"x-oss-meta-name1"];
// Set the access permissions of the object to private.
// [meta setObject:@"private" forKey:@"x-oss-object-acl"];
// Set the storage class of the object to Standard.
// [meta setObject:@"Standard" forKey:@"x-oss-storage-class"];
// Overwrite the destination object that has the same name.
// [meta setObject:@"true" forKey:@"x-oss-forbid-overwrite"];
// Specify object tags. You can specify multiple tags.
// [meta setObject:@"a:1" forKey:@"x-oss-tagging"];
// Specify the server-side encryption algorithm that OSS uses to create the destination object.
// [meta setObject:@"AES256" forKey:@"x-oss-server-side-encryption"];
// The customer master key (CMK) that is managed by KMS. This parameter is valid only when x-oss-server-side-encryption is set to KMS.
// [meta setObject:@"9468da86-3509-4f8d-a61e-6eab1eac****" forKey:@"x-oss-server-side-encryption-key-id"];
// put.objectMeta = meta;
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
// waitUntilFinished blocks the current thread, but does not block the upload process.
// [putTask waitUntilFinished];
// [put cancel];
Télécharger un fichier dans un répertoire
OSS ne possède pas le concept de dossiers. Tous les éléments sont stockés sous forme de fichiers. OSS propose un moyen de simuler des dossiers. Pour simuler un dossier, créez un fichier dont le nom se termine par une barre oblique (/). Cela vous permet de télécharger des fichiers dans ce répertoire. La console affiche les fichiers se terminant par une barre oblique (/) comme des dossiers.
Par exemple, lorsque vous téléchargez un fichier, si vous définissez objectKey sur folder/subfolder/file, le fichier est téléchargé dans le répertoire folder/subfolder/.
Le chemin par défaut est le répertoire racine. Le chemin n'a pas besoin de commencer par une barre oblique (/).
Définir contentType et utiliser la validation MD5 lors d'un téléchargement
Pour garantir que les données envoyées par le client sont identiques à celles reçues par le serveur OSS, vous pouvez ajouter une valeur contentMd5 lors du téléchargement d'un fichier. Le serveur OSS utilise cette valeur MD5 pour la validation. Vous pouvez également spécifier explicitement le contentType lors du téléchargement d'un fichier. Si vous ne spécifiez pas le contentType, le SDK détermine automatiquement le type de contenu en fonction du nom de fichier ou de l'objectKey du téléchargement.
La validation MD5 peut réduire les performances.
Le SDK fournit une méthode pratique pour calculer les valeurs Base64 et contentMd5.
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// Specify the bucket name. For example, examplebucket.
put.bucketName = @"examplebucket";
// Specify the full path of the object. For example, exampledir/exampleobject.txt. The full path cannot contain the bucket name.
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// Directly upload NSData.
// put.uploadingData = <NSData *>;
// (Optional) Set contentType.
put.contentType = @"application/octet-stream";
// (Optional) Set contentMd5 validation.
// Set contentMd5 validation for the file path.
put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"];
// Set contentMd5 validation for the binary data.
// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>];
// (Optional) Set the upload progress.
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// The current upload length, the total uploaded length, and the total length to upload.
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
// waitUntilFinished blocks the current thread, but does not block the upload process.
// [putTask waitUntilFinished];
// [put cancel];
Références
Pour obtenir l'exemple de code complet pour le téléchargement simple, consultez l'exemple GitHub.
Pour plus d'informations sur l'opération API relative au téléchargement simple, consultez la page PutObject.
Pour plus d'informations sur l'initialisation d'une instance OSSClient, consultez la page Initialiser une instance OSSClient.