Есть ли способ отфильтровать listBlobFlatSegment в azure хранилище BLOB-объектов по окончанию их имен? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь получить имя большого двоичного объекта из списка больших двоичных объектов в контейнере, который является самым последним и который заканчивается sh чем-то вроде этого "_20167", все файлы имеют тип XML и имеют следующее структура: "{UUID} _ {DocumentType} _ {Status} _ {Source} _ {CompanyNumber}. xml", например: "1CE6A613-3D64-40E9-B17F-68C063ABC613_2C98EF3B-038B-4AA4-91E1-6FC32E012974_igenura_v. xml ".

Я использую префикс метода containerURL.listBlobFlatSegment , но я не смог найти способ изменить функциональность, чтобы использовать префикс для поиска в конце. Вот мой код функции, я передаю только имя контейнера и параметр для поиска, это называется "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;
    }
  }

Я искал другой метод для динамического поиска в полном списке больших двоичных объектов. но я не получил достаточно информации. Так что большое спасибо за вашу ориентацию!

1 Ответ

0 голосов
/ 17 января 2020

Большое спасибо за ответ, принимая во внимание вашу идею, я мог бы отделить полный список 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;
      }
    }```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...