gpt4 book ai didi

javascript - 如何从 BlobResult[] 获取 blob 名称?

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:29 24 4
gpt4 key购买 nike

我想删除我的 Azure Blob 存储中的所有文件。为此,我使用 listBlobsSegmented() 列出存储中的所有 Blob,然后将结果传递给 deleteBlobIfExists()。但是 list BlobsSegment() 中的参数 blob.name 未正确分配。如何正确获取blob名称?

这是存储模型:

const blobService = azure.createBlobService(accountName, accessKey, host); 
const containerName = 'container';

module.exports.listAll = () => {
return new Promise(function(resolve, reject) {
blobService.listBlobsSegmented(containerName, null, function(err, listBlobsResult) {
if (err) {
reject(err);
} else {
resolve(listBlobsResult);
}
});
});
}

module.exports.delete = (blobName) => {
return new Promise(function(resolve, reject) {
blobService.deleteBlobIfExists(containerName, blobName, function(err, result) {
if (err) {
reject(err);
} else {
resolve({ message: `Block blob '${blobName}' deleted` });
}
})
})
}

这就是我使用它们的方式:

const azureStorage = require('./storage-model')

router.get('/listAll', function(req, res) {
azureStorage.listAll().then((listBlobsResult) => {
console.log(listBlobsResult);
res.send(listBlobsResult);
}).catch((err) => {
console.log(err);
});
});

router.get('/deleteAll', function(req, res) {
azureStorage.listAll().then((listBlobsResult) => {
var responseBody;
for (blob in listBlobsResult.entries) {
azureStorage.delete(blob.name).then((result) => {
console.log(result);
responseBody += result;
}).catch((err) => {
console.log(err);
});
}
res.send(responseBody);
}).catch((err) => {
console.log(err);
});
})

这样做之后,它给了我错误消息

ArgumentNullError: Required argument blob for function deleteBlobIfExists is not defined

以下是 Microsoft 的一些引用资料 deleteBlobIfExists() listBlobsSegmented() ListBlobsResult BlobResult

我发现 blob.name 只返回 blob 索引号,而不返回实际的 blob 名称。有人可以帮助我吗?谢谢!

<小时/>

这就是 listBlobsResult.entries 的样子:

[ {previous blob result},
BlobResult {
name: 'my_container/some_picture.jpg',
creationTime: 'Thu, 11 Jul 2019 09:33:20 GMT',
lastModified: 'Thu, 11 Jul 2019 09:33:20 GMT',
etag: '0x8D705A4CFCB5528',
contentLength: '6300930',
contentSettings:
{ contentType: 'application/octet-stream',
contentEncoding: '',
contentLanguage: '',
contentMD5: 'OyHfg8c3irniQzyhtCBdrw==',
cacheControl: '',
contentDisposition: '' },
blobType: 'BlockBlob',
lease: { status: 'unlocked', state: 'available' },
serverEncrypted: 'true' },
{next blob result},
...{many others blob result}]

我期望的是,我可以使用 blob.name 在 listBlobsResult.entries 迭代中从条目 blob 中获取 blob 名称。但它给了我迭代索引。

最佳答案

listBlobsResult.entries 的类型为 BlobResult[]

而且,for 循环有两种类型,人们很容易混淆它们。

对于...

for (let index in listBlobsResult.entries) {
let blob = listBlobsResult.entries[index];

/* ... do the work */
}

对于...的

for (let blob of listBlobsResult.entries) {
/* ... do the work */
}

关于javascript - 如何从 BlobResult[] 获取 blob 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57000085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com