我正在尝试获取最新容器上的blob列表的blob名称,并以类似“ _20167”的结尾,所有文件均为XML类型,并具有以下结构:“ {UUID } _ {DocumentType} _ {Status} _ {Source} _ {CompanyNumber} .xml”,例如:“ 1CE6A613-3D64-40E9-B17F-68C063ABC613_2C98EF3B-038B-4AA4-91E1-6FC32E012974_factura_vigente.xml”。
我使用的是 containerURL.listBlobFlatSegment 方法的前缀,但是我找不到改变使用前缀搜索功能的方法。 这是我的功能代码,我只传递要搜索的容器名称和de参数,这称为“ companyNumber”:
async downloadListOfBlobs({ containerName, companyNumber }) {
try {
const containerURL = ContainerURL.fromServiceURL(
this._serviceURL,
containerName
);
let marker;
marker = undefined;
let blobsInContainer = [];
const prefix = `${companyNumber}.xml`;
do {
const listBlobsResponse = await containerURL.listBlobFlatSegment(
Aborter.none,
marker,
{ include: null,
maxresults: marker ,
prefix }
);
marker = listBlobsResponse.nextMarker;
for (const blob of listBlobsResponse.segment.blobItems) {
console.log(`Blob: ${blob.name}`);
blobsInContainer.push(`${blob.name}`);
}
} while (marker);
return blobsInContainer[0] ? blobsInContainer[0] : '';
} catch (error) {
console.log(error);
throw error;
}
}
有人在寻找另一种方法来动态搜索整个Blob,但我没有得到足够的信息。 因此,非常感谢您的指导!
答案 0 :(得分:0)
非常感谢您的答复,请考虑一下您的想法,我可以将感兴趣的Blob的完整Blob列表分开,但是,我仍然不能仅针对lisBlobFlatSegment函数直接过滤其结尾等于我公司编号的文档,并且这种情况会危害性能功能。这是完整的新代码:
try {
const containerURL = ContainerURL.fromServiceURL(
this._serviceURL,
containerName
);
let marker;
marker = undefined;
let blobsInContainer = [];
let blobsInContainerNames = [];
const prefix = `${companyNumber}.xml`;
do {
const listBlobsResponse = await containerURL.listBlobFlatSegment(
Aborter.none,
marker,
);
marker = listBlobsResponse.nextMarker;
for (const blob of listBlobsResponse.segment.blobItems) {
if ((prefix && blob.name.endsWith(prefix)) || !prefix) {
blobsInContainer.push(blob);
}
}
} while (marker);
blobsInContainer.sort(function(a,b){
return new Date(b.properties.lastModified) - new Date(a.properties.lastModified);
})
for (const blob of blobsInContainer) {
if ((prefix && blob.name.endsWith(prefix)) || !prefix) {
blobsInContainerNames.push(blob.name);
}
}
console.log('blobSelected', blobsInContainerNames[0]);
return blobsInContainerNames[0] ? blobsInContainerNames[0] : '';
} catch (error) {
console.log(error);
throw error;
}
}```