Estoy tratando de descargar un archivo vacío de un recurso compartido de archivos de Azure con las herramientas proporcionadas en Azure.Storage.Files.Shares . La descarga de un archivo que contiene más de 0 bytes funciona bien. Sin embargo, en mis pruebas de integración, estoy creando/descargando archivos vacíos. Para mis pruebas, no es un gran problema usar solo archivos completos, pero no es irrazonable que un archivo vacío pueda cargarse accidentalmente y elegirse para descargarlo en nuestra aplicación. Así que aquí está el problema:
Recibo un error InvalidRange:
Status: 416 (The range specified is invalid for the current size of the resource.) ErrorCode: InvalidRange Content: <?xml version="1.0" encoding="utf-8"?><Error><Code>InvalidRange</Code><Message>The range specified is invalid for the current size of the resource. RequestId:9f04885b-401a-005e-80fa-77d94a000000 Time:2021-07-13T15:16:59.9547272Z</Message></Error> Headers: Content-Range: bytes */0 x-ms-request-id: 9f04885b-401a-005e-80fa-77d94a000000 x-ms-client-request-id: a6ee7be7-7ae9-4587-b28c-d6a15cd499e8 x-ms-version: 2020-08-04 x-ms-error-code: InvalidRange Content-Length: 249 Content-Type: application/xml Date: Tue, 13 Jul 2021 15:16:59 GMT Server: Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0Mi código de descarga es el código proporcionado en este código de ejemplo :
ShareFileDownloadInfo download = file.Download(); using (FileStream stream = File.OpenWrite(localFilePath)) { download.Content.CopyTo(stream); }Nuevamente, funciona bien para archivos que no están vacíos. La documentación de la API REST de almacenamiento subyacente dice que 'Rango' es un parámetro opcional que, cuando se deja vacío, descargará todo el contenido del archivo de forma predeterminada. Sé que es posible hacerlo porque los archivos se pueden descargar manualmente a través de Azure Portal.
¿Es un error o el código de descarga está incompleto?
Confirmado como un error. Seguimiento aquí https://github.com/Azure/azure-sdk-for-net/issues/22616
Mientras espera que se solucione el error (lo que puede llevar un tiempo), siempre puede verificar la longitud del contenido del archivo antes de intentar una descarga.
ShareFileProperties properties = file.GetProperties(); if (properties.ContentLength > 0) { ShareFileDownloadInfo response = file.Download(); response.Content.CopyTo(myStream); }