Uso los paquetes @azure/storage-blob:^12.8.0, @azure/storage-queue: ^12.7.0 para autenticar y conectarme al almacenamiento de blobs de Azure, la autenticación se realiza a través de identidades administradas y el acceso otorgado al destino con Storage Blob Data Contributor Rol de Storage Blob Data Contributor , a continuación está mi código
const credentialOptions = { managedIdentityClientId: process.env.MANAGED_IDENTITY_CLIENT_ID }; const CONTAINER_NAME = 'C1'; const credential = new DefaultAzureCredential(credentialOptions); const blobSvc = new BlobServiceClient(process.env.STORAGE_HOST, credential); const containerClient = blobSvc.getContainerClient(CONTAINER_NAME); export const store = async (file: string, folder: string) => { const fileName = path.basename(file); const blob = `${folder}/${fileName}`; try { console.debug(`starting store ${blob}...`); const blobClient = containerClient.getBlockBlobClient(blob); await blobClient.uploadFile(file); console.debug('store done.'); return blob; } catch (err) { console.error(err); throw Error(err); } }; // in other module import {store} from 'BlobStorageHelper'; store('folder1/folder2/folder3', '/temporary/path/to/the/file.jpg'); todo funciona excepto que el archivo está almacenado en el lugar equivocado, por ejemplo, llamando a store('folder1/folder2/folder3', 'path/file.jpg') Espero que el archivo se almacene en folder1/folder2/folder3/file.jpg pero el archivo se almacena en C1/folder1/folder2/folder3/file.jpg C1 es el nombre del contenedor que es incorrecto y no debería suceder, el código se ejecuta como nodo de funciones de Azure.
para que quede claro, la expectativa es
pero el resultado real es
Alguna idea ?
Pruebe con este código, probé este código en mi sistema capaz de almacenar el archivo con estructura de carpetas en un contenedor azul
const blobServiceClient = BlobServiceClient.fromConnectionString("Connection String"); const containerClient = blobServiceClient.getContainerClient(containerName); const blobName="test1/test2 "+ "/" + "test" const blockBlobClient = containerClient.getBlockBlobClient(blobName); const file="C: \\blobs\\test.txt" await blockBlobClient.uploadFile(file); console.log('\nUploading to Azure storage as blob:\n\t', blobName);PRODUCCIÓN
Los archivos se guardan en un contenedor en Azure Storage
El problema era un valor incorrecto proveniente de AppSettings que no era obvio en el código. debería ser https://accountname.blob.core.windows.net pero en su lugar, era https://accountname.blob.core.windows.net/ContainerName .