Как проверить, существует ли файл в контейнере BLOB-объектов Azure в Java - PullRequest
0 голосов
/ 28 января 2019

Я хочу проверить, существует ли файл в контейнере хранилища BLOB-объектов Azure.Если файл существует, я скачиваю файл.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Более простой способ (и менее запутанный для меня), если вы являетесь владельцем блоба, вдохновленный ответом @Peter Pan.

boolean blobExists(String containerName, String blobName) {
    ServiceURL serviceUrl = getServiceUrl();
    HttpURLConnection httpUrlConnection = (HttpURLConnection)
        serviceUrl.createContainerURL(containerName)
            .createBlockBlobURL(blobName)
            .toURL().openConnection();
    httpUrlConnection.setRequestMethod("HEAD");
    return httpUrlConnection.getResponseCode() / 100 == 2;
}

ServiceURL getServiceUrl() {
    SharedKeyCredentials credentials = new SharedKeyCredentials(accountName, accountKey);
    return new ServiceURL(new URL(azureUrl), StorageURL.createPipeline(credentials, new PipelineOptions()));
}

Протестировано с библиотекой com.microsoft.azure:azure-storage-blob:10.5.0.

0 голосов
/ 29 января 2019

Из-за отсутствия REST API или SDK API для проверки наличия большого двоичного объекта, поэтому вы не можете напрямую проверить его.Как я знаю, единственный способ проверить наличие большого двоичного объекта - это проверить информацию об ошибке при получении большого двоичного объекта, см. Common REST API Error Codes, как показано ниже.

enter image description here

Вот мои шаги и пример кода для проверки существования большого двоичного объекта с использованием Microsoft Azure Storage SDK v10 для Java .

maven зависимость Azure Storage SDK v10 для Java, как показано ниже.

<!-- https://mvnrepository.com/artifact/com.microsoft.azure/azure-storage-blob -->
<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-storage-blob</artifactId>
    <version>10.4.0</version>
</dependency>
  1. Создание URL-адреса BLOB-объекта с подписью SAS.

    String accountName = "<your storage account name>";
    String accountKey = "<your storage account key>";
    
    public String generateUrlWithSAS(String containerName, String blobName) throws InvalidKeyException {
        SharedKeyCredentials credentials = new SharedKeyCredentials(accountName, accountKey);
        ServiceSASSignatureValues values = new ServiceSASSignatureValues()
                .withProtocol(SASProtocol.HTTPS_ONLY) // Users MUST use HTTPS (not HTTP).
                .withExpiryTime(OffsetDateTime.now().plusDays(2)) // 2 days before expiration.
                .withContainerName(containerName)
                .withBlobName(blobName);
        BlobSASPermission permission = new BlobSASPermission()
                .withRead(true)
                .withAdd(true)
                .withWrite(true);
        values.withPermissions(permission.toString());
        SASQueryParameters serviceParams = values.generateSASQueryParameters(credentials);
        String sasSign = serviceParams.encode();
        return String.format(Locale.ROOT, "https://%s.blob.core.windows.net/%s/%s%s", accountName, containerName, blobName, sasSign);
    }
    
  2. Сделайте запрос Http Head для URL с подписью SAS, чтобы проверить код состояния ответа

    public static boolean exists(String urlWithSAS) throws MalformedURLException, IOException {
        HttpURLConnection conn = (HttpURLConnection) new URL(urlWithSAS).openConnection();
        conn.setRequestMethod("HEAD");
        return conn.getResponseCode() == 200;
    }
    

Кроме того, вы можете напрямую проверить существование через перехват соответствующихисключение при загрузке BLOB-объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...