gcs-rust-download-object-api

Par divinevideo · divine-mobile

Corrige l'erreur "DownloadObjectRequest not found" dans le crate Rust google-cloud-storage. À utiliser quand : (1) vous essayez de télécharger des objets depuis GCS avec le SDK Rust, (2) vous cherchez un type de requête de téléchargement dans le module http::objects::download, (3) vous obtenez une erreur de compilation sur un type manquant. La méthode download_object utilise `GetObjectRequest` du module get, et non un type `DownloadObjectRequest` distinct.

npx skills add https://github.com/divinevideo/divine-mobile --skill gcs-rust-download-object-api

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-storage en 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 Range est aliasé en DownloadRange pour é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_object avec GetObjectRequest
  • Le champ Media.content_type est Cow<'static, str>, utilisez .into() pour la conversion de chaîne

Références

Skills similaires