我想删除我的Azure Blob存储中的所有文件。为此,我使用listBlobsSegmented()列出了存储中的所有Blob,然后将结果传递给deleteBlobIfExists()。但是列表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:函数所需的参数blob
未定义deleteBlobIfExists
以下是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 */
}