API de téléchargement d'objets GCS Rust SDK
Problème
Lors de l'utilisation de la crate google-cloud-storage Rust pour télécharger des objets, les développeurs cherchent souvent un type DownloadObjectRequest dans le module download, s'attendant à ce qu'il reprenne le même motif que l'upload. Ce type n'existe pas, ce qui cause des erreurs de compilation confuses.
Contexte / Conditions déclenchantes
- Utilisation de la crate
google-cloud-storageen Rust - Tentative d'appel à
client.download_object() - Erreur :
unresolved import google_cloud_storage::http::objects::download::DownloadObjectRequest - Recherche de types de requête dans le module
http::objects::download
Solution
La méthode download_object utilise GetObjectRequest du module get, combinée avec Range du module download :
use google_cloud_storage::http::objects::{
download::Range as DownloadRange,
get::GetObjectRequest,
};
// Télécharger l'objet complet
let data = client.download_object(
&GetObjectRequest {
bucket: "my-bucket".to_string(),
object: "path/to/object".to_string(),
..Default::default()
},
&DownloadRange::default(),
).await?;
// Télécharger un objet partiel (octets 0-1023)
let partial = client.download_object(
&GetObjectRequest {
bucket: "my-bucket".to_string(),
object: "path/to/object".to_string(),
..Default::default()
},
&DownloadRange::Bounded(0, 1023),
).await?;
Vérification
Le code se compile et download_object retourne Vec<u8> contenant le contenu de l'objet.
Exemple
use google_cloud_storage::{
client::{Client as GcsClient, ClientConfig},
http::objects::{
download::Range as DownloadRange,
get::GetObjectRequest,
upload::{Media, UploadObjectRequest, UploadType},
},
};
async fn download_from_gcs(client: &GcsClient, bucket: &str, key: &str) -> Result<Vec<u8>> {
let data = client.download_object(
&GetObjectRequest {
bucket: bucket.to_string(),
object: key.to_string(),
..Default::default()
},
&DownloadRange::default(),
).await?;
Ok(data)
}
Notes
- Le type
Rangeest aliasé enDownloadRangepour éviter les conflits avec std::ops::Range DownloadRange::default()télécharge l'objet entier- Pour vérifier l'existence d'un objet sans le télécharger, utilisez
get_objectavecGetObjectRequest - Le champ
Media.content_typeestCow<'static, str>, utilisez.into()pour la conversion de chaîne