javascript - 将文件保存到 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 函数节点。
说清楚,期望是
- C1(容器)
- 文件夹1
- 文件夹2
- 文件夹3
- 文件.jpg
- 文件夹3
- 文件夹2
- 文件夹1
但实际结果是
- C1(容器)
- C1
- 文件夹1
- 文件夹2
- 文件夹3
- 文件.jpg
- 文件夹3
- 文件夹2
- 文件夹1
- C1
任何的想法 ?
解决方案
尝试使用此代码,我在我的系统中尝试了此代码,能够将具有文件夹结构的文件存储在 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 的容器中
推荐阅读
- python - 如何从 python 导出数字然后重用它们
- python - 如何比较 CSV 文件的 2 列之间的时间增量?
- azure-ad-b2c - 从 Azure AD B2C 自定义策略调用 Azure AD Graph API?
- generics - 消除 kotlin 泛型函数的歧义
- c++ - 如何防止基类的受保护成员仍然在子类的第二级被访问?
- reactjs - 有条件渲染的 React 组件不重置状态
- php - yii2 doble gridview 形式
- angularjs - 使用角度资源覆盖 URL 不起作用
- java - Can't set color to JPanel in Java
- java - 将终端框架嵌入到 JFrame 窗口 Java 中