首页 > 解决方案 > 将文件保存到 Azure Blob 存储的奇怪行为

问题描述

我正在使用@azure/storage-blob:^12.8.0, @azure/storage-queue: ^12.7.0包进行身份验证并连接到 Azure blob 存储,身份验证通过托管标识和目标授予访问权限Storage Blob Data Contributor,下面是我的代码

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');

一切正常,除了文件存储在错误的位置,例如,通过调用store('folder1/folder2/folder3', 'path/file.jpg')我希望文件存储在folder1/folder2/folder3/file.jpg但文件存储在C1/folder1/folder2/folder3/file.jpg C1是容器的名称,这是错误的,不应该发生,代码运行作为 Azure 函数节点。

说清楚,期望是

但实际结果是

任何的想法 ?

标签: javascriptazure-functionsazure-blob-storage

解决方案


尝试使用此代码,我在我的系统中尝试了此代码,能够将具有文件夹结构的文件存储在 azure 容器中

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);

输出

在此处输入图像描述

文件保存在 azure storage 的容器中

在此处输入图像描述


推荐阅读