Descarga de un blob con Go
En este artículo se muestra cómo descargar un blob con el módulo cliente de Azure Storage para Go. Puede descargar datos de blob en varios destinos, incluyendo una ruta de acceso de archivo local, una secuencia o una cadena de texto.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- Una cuenta de Azure Storage: cree una cuenta de almacenamiento
- Go 1.18+
Configurar el entorno
Si no tiene un proyecto existente, esta sección muestra cómo configurar un proyecto para trabajar con el módulo cliente Azure Blob Storage para Go. Los pasos incluyen la instalación del módulo, la adición de rutas de acceso de import
y la creación de un objeto de cliente autorizado. Para obtener información, consulte Introducción a Azure Blob Storage y Go.
Módulos de instalación
Instale el módulo azblob mediante el siguiente comando:
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Para autenticarse con Microsoft Entra ID (recomendado), instale el módulo azidentity
mediante el siguiente comando:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Agregar rutas de importación
En el archivo de código, agregue las rutas de importación siguientes:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
Estas rutas de importación representan el mínimo necesario para empezar. Algunos ejemplos de código de este artículo pueden requerir rutas de importación adicionales. Para obtener detalles específicos y ejemplos de uso, consulte Ejemplos de código.
Creación de un objeto de cliente
Para conectar una aplicación a Blob Storage, cree un objeto de cliente mediante azblob.NewClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential
para la autorización:
func getServiceClientTokenCredential(accountURL string) *azblob.Client {
// Create a new service client with token credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(accountURL, credential, nil)
handleError(err)
return client
}
Authorization
El mecanismo de autorización debe tener los permisos necesarios para realizar una operación de descarga. Para la autorización con Microsoft Entra ID (recomendado) se necesita el rol integrado de RBAC de Azure de Lector de datos de Storage Blob o superior. Para obtener más información, consulte la guía de autorización de Obtener blobs (API de REST).
Descarga de un blob
Puede usar cualquiera de los métodos siguientes para descargar un blob:
Descarga en una ruta de acceso de archivo
En el ejemplo siguiente se descarga un blob en una ruta de acceso de archivo:
func downloadBlobToFile(client *azblob.Client, containerName string, blobName string) {
// Create or open a local file where we can download the blob
file, err := os.Create("path/to/sample/file")
handleError(err)
// Download the blob to the local file
_, err = client.DownloadFile(context.TODO(), containerName, blobName, file, nil)
handleError(err)
}
Descarga en una secuencia
En el ejemplo siguiente se descarga un blob en una secuencia y se lee desde la secuencia llamando al método NewRetryReader.
func downloadBlobToStream(client *azblob.Client, containerName string, blobName string) {
// Download the blob
get, err := client.DownloadStream(context.TODO(), containerName, blobName, nil)
handleError(err)
downloadedData := bytes.Buffer{}
retryReader := get.NewRetryReader(context.TODO(), &azblob.RetryReaderOptions{})
_, err = downloadedData.ReadFrom(retryReader)
handleError(err)
err = retryReader.Close()
handleError(err)
// Print the contents of the blob we created
fmt.Println("Blob contents:")
fmt.Println(downloadedData.String())
}
Especificar las opciones de transferencia de datos para la descarga
Puede establecer opciones de configuración al descargar un blob para optimizar el rendimiento. Las siguientes opciones de configuración están disponibles para las operaciones de descarga:
BlockSize
: tamaño de cada bloque al descargar un blob en bloques. El valor predeterminado es 4 MB.Concurrency
: número máximo de conexiones paralelas que se usarán durante la descarga. El valor predeterminado es 5.
Estas opciones están disponibles al descargar mediante los métodos siguientes:
El método DownloadStream no admite estas opciones y descarga datos en una sola solicitud.
Para más información sobre los límites de tamaño de transferencia para Blob Storage, consulte Objetivos de escalabilidad de Blob Storage.
En el ejemplo de código siguiente se muestra cómo especificar opciones de transferencia de datos mediante DownloadFileOptions. Los valores proporcionados en este ejemplo no están diseñados para ser una recomendación. Para ajustar correctamente estos valores, debe tener en cuenta las necesidades específicas de la aplicación.
func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
// Create or open a local file where we can download the blob
file, err := os.Create("path/to/sample/file")
handleError(err)
// Download the blob to the local file
_, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
&azblob.DownloadFileOptions{
BlockSize: int64(4 * 1024 * 1024), // 4 MiB
Concurrency: uint16(2),
})
handleError(err)
}
Para más información sobre cómo ajustar las opciones de transferencia de datos, consulte Ajuste del rendimiento para cargas y descargas con Go.
Nota:
Los ejemplos de código de esta guía están diseñados para ayudarle a empezar a trabajar con Azure Blob Storage y Go. Debe modificar el control de errores y los valores de Context
para satisfacer las necesidades de la aplicación.
Recursos
Para más información sobre cómo descargar blobs con el módulo cliente de Azure Blob Storage para Go, consulte los recursos siguientes.
Ejemplos de código
- Visualización de ejemplos de código de este artículo (GitHub)
Operaciones de API REST
Azure SDK para Go contiene bibliotecas que se crean a partir de la API de REST de Azure, lo que le permite interactuar con las operaciones de API de REST a través de paradigmas conocidos de Go. Los métodos de la biblioteca cliente para descargar blobs usan la siguiente operación de API REST:
- Get Blob (API REST)
Recursos del módulo cliente
- Documentación de referencia del módulo cliente
- Código fuente del módulo cliente
- Paquete (pkg.go.dev)
Contenido relacionado
- Este artículo forma parte de la guía para desarrolladores de Blob Storage para Go. Para obtener más información, consulte la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación Go.