Java ile blok blobu yükleme

Bu makalede, Java için Azure Depolama istemci kitaplığını kullanarak blok blobunun nasıl karşıya yüklendiği gösterilmektedir. Bir dosya yolundan, akıştan, ikili nesneden veya metin dizesinden blok bloba veri yükleyebilirsiniz. Blobları dizin etiketleriyle de karşıya yükleyebilirsiniz.

Ön koşullar

  • Bu makalede, Java için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere ayarlanmış bir projeniz olduğu varsayılır. Paket yükleme, yönergeler ekleme import ve yetkili istemci nesnesi oluşturma dahil olmak üzere projenizi ayarlama hakkında bilgi edinmek için bkz. Azure Depolama ve Java ile Çalışmaya Başlama.
  • Yetkilendirme mekanizmasının karşıya yükleme işlemi gerçekleştirme izinleri olmalıdır. Daha fazla bilgi edinmek için aşağıdaki REST API işlemleri için yetkilendirme kılavuzuna bakın:

Blok bloba veri yükleme

Blok blobunu bir akıştan veya ikili nesneden karşıya yüklemek için aşağıdaki yöntemi kullanın:

Blok blobunu bir dosya yolundan karşıya yüklemek için aşağıdaki yöntemi kullanın:

Bu yöntemlerin her biri BlobClient nesnesi veya BlockBlobClient nesnesi kullanılarak çağrılabilir.

Yerel dosya yolundan blok blobu yükleme

Aşağıdaki örnek, nesne kullanarak BlobClient bir dosyayı blok bloba yükler:

public void uploadBlobFromFile(BlobContainerClient blobContainerClient) {
    BlobClient blobClient = blobContainerClient.getBlobClient("sampleBlob.txt");

    try {
        blobClient.uploadFromFile("filepath/local-file.png");
    } catch (UncheckedIOException ex) {
        System.err.printf("Failed to upload from file: %s%n", ex.getMessage());
    }
}

Akıştan blok blobu yükleme

Aşağıdaki örnek, bir nesne oluşturup bu akış nesnesini karşıya yükleyerek bir ByteArrayInputStream blok blobunu karşıya yükler:

public void uploadBlobFromStream(BlobContainerClient blobContainerClient) {
    BlockBlobClient blockBlobClient = blobContainerClient.getBlobClient("sampleBlob.txt").getBlockBlobClient();
    String sampleData = "Sample data for blob";
    try (ByteArrayInputStream dataStream = new ByteArrayInputStream(sampleData.getBytes())) {
        blockBlobClient.upload(dataStream, sampleData.length());
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

BinaryData nesnesinden blok blobu yükleme

Aşağıdaki örnek bir nesne kullanarak BlobClient blok bloba yüklenirBinaryData:

public void uploadDataToBlob(BlobContainerClient blobContainerClient) {
    // Create a BlobClient object from BlobContainerClient
    BlobClient blobClient = blobContainerClient.getBlobClient("sampleBlob.txt");
    String sampleData = "Sample data for blob";
    blobClient.upload(BinaryData.fromString(sampleData));
}

Yapılandırma seçenekleriyle blok blobu karşıya yükleme

Blobu karşıya yüklerken istemci kitaplığı yapılandırma seçeneklerini tanımlayabilirsiniz. Bu seçenekler performansı geliştirmek, güvenilirliği artırmak ve maliyetleri iyileştirmek için ayarlanabilir. Aşağıdaki kod örnekleri, karşıya yükleme yöntemini çağırırken yapılandırma seçeneklerini tanımlamak için BlobUploadFromFileOptions'ın nasıl kullanılacağını gösterir. Bir dosyadan karşıya yüklemiyorsanız, karşıya yükleme yönteminde BlobParallelUploadOptions kullanarak benzer seçenekleri ayarlayabilirsiniz.

Karşıya yüklemede veri aktarımı seçeneklerini belirtme

Veri aktarımı işlemlerinin performansını artırmak için ParallelTransferOptions içinde değerleri yapılandırabilirsiniz. Aşağıdaki değerler, uygulamanızın gereksinimlerine göre karşıya yüklemeler için ayarlanabilir:

  • blockSize: Her istek için aktarım için en büyük blok boyutu. setBlockSizeLong yöntemini kullanarak bu değeri ayarlayabilirsiniz.
  • maxSingleUploadSize: Verilerin boyutu bu değerden küçük veya bu değere eşitse, öbeklere ayırmak yerine tek bir yere yüklenir. Veriler tek bir çekimde karşıya yüklenirse blok boyutu yoksayılır. setMaxSingleUploadSizeLong yöntemini kullanarak bu değeri ayarlayabilirsiniz.
  • maxConcurrency: Tek bir paralel aktarımın parçası olarak herhangi bir zamanda verilen en fazla paralel istek sayısı. setMaxConcurrency yöntemini kullanarak bu değeri ayarlayabilirsiniz.

Karşıya yükleme için kullanılacak ParallelTransferOptions aşağıdaki import yönergeye sahip olduğunuzdan emin olun:

import com.azure.storage.blob.models.*;

Aşağıdaki kod örneğinde ParallelTransferOptions değerlerinin nasıl ayarlanacağı ve blobUploadFromFileOptions örneğinin parçası olarak seçeneklerin nasıl eklanacağı gösterilmektedir . Bu örnekte sağlanan değerler bir öneri olarak tasarlanmamıştır. Bu değerleri düzgün ayarlamak için uygulamanızın belirli gereksinimlerini dikkate almanız gerekir.

public void uploadBlockBlobWithTransferOptions(BlobContainerClient blobContainerClient, Path filePath) {
    String fileName = filePath.getFileName().toString();
    BlobClient blobClient = blobContainerClient.getBlobClient(fileName);

    ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
            .setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
            .setMaxConcurrency(2)
            .setMaxSingleUploadSizeLong((long) 8 * 1024 * 1024); // 8 MiB max size for single request upload

    BlobUploadFromFileOptions options = new BlobUploadFromFileOptions(filePath.toString());
    options.setParallelTransferOptions(parallelTransferOptions);

    try {
        Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, null, null);
    } catch (UncheckedIOException ex) {
        System.err.printf("Failed to upload from file: %s%n", ex.getMessage());
    }
}

Veri aktarımı seçeneklerini ayarlama hakkında daha fazla bilgi edinmek için bkz . Java ile karşıya yüklemeler ve indirmeler için performans ayarlama.

Dizin etiketleriyle blok blobu karşıya yükleme

Blob dizin etiketleri, anahtar-değer etiketi özniteliklerini kullanarak depolama hesabınızdaki verileri kategorilere ayırır. Bu etiketler otomatik olarak dizinlenir ve verileri kolayca bulmak için aranabilir çok boyutlu bir dizin olarak kullanıma sunulur.

Aşağıdaki örnekte BlobUploadFromFileOptions kullanılarak dizin etiketleri ayarlanmış bir blok blobu karşıya yüklenir:

public void uploadBlockBlobWithIndexTags(BlobContainerClient blobContainerClient, Path filePath) {
    String fileName = filePath.getFileName().toString();
    BlobClient blobClient = blobContainerClient.getBlobClient(fileName);

    Map<String, String> tags = new HashMap<String, String>();
    tags.put("Content", "image");
    tags.put("Date", "2022-01-01");

    Duration timeout = Duration.ofSeconds(10);

    BlobUploadFromFileOptions options = new BlobUploadFromFileOptions(filePath.toString());
    options.setTags(tags);

    try {
        // Create a new block blob, or update the content of an existing blob
        Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, timeout, null);
    } catch (UncheckedIOException ex) {
        System.err.printf("Failed to upload from file: %s%n", ex.getMessage());
    }
}

Karşıya yüklemede blob'un erişim katmanını ayarlama

BlobUploadFromFileOptions sınıfını kullanarak karşıya yüklemede blob'un erişim katmanını ayarlayabilirsiniz. Aşağıdaki kod örneğinde blob karşıya yüklenirken erişim katmanının nasıl ayarlanacağı gösterilmektedir:

public void uploadBlobWithAccessTier(BlobContainerClient blobContainerClient, Path filePath) {
    String fileName = filePath.getFileName().toString();
    BlobClient blobClient = blobContainerClient.getBlobClient(fileName);

    BlobUploadFromFileOptions options = new BlobUploadFromFileOptions(filePath.toString())
            .setTier(AccessTier.COOL);

    try {
        Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, null, null);
    } catch (UncheckedIOException ex) {
        System.err.printf("Failed to upload from file: %s%n", ex.getMessage());
    }
}

Erişim katmanının ayarlanmasına yalnızca blok blobları için izin verilir. Blok blobu için erişim katmanını Hot, , CoolColdveya Archiveolarak ayarlayabilirsiniz. Erişim katmanını olarak ayarlamak için Colden düşük istemci kitaplığı sürümü olan 12.21.0 kullanmanız gerekir.

Erişim katmanları hakkında daha fazla bilgi edinmek için bkz . Erişim katmanlarına genel bakış.

Blokları hazırlama ve işleme yoluyla blok blobu yükleme

Tek tek veri bloklarını el ile hazırlayarak karşıya yüklemeleri bloklara bölme konusunda daha fazla denetime sahip olabilirsiniz. Bir blobu oluşturan tüm bloklar hazırlandığında, bunları Blob Depolama'a işleyebilirsiniz. Blokları paralel olarak karşıya yükleyerek performansı geliştirmek için bu yaklaşımı kullanabilirsiniz.

public void uploadBlocks(BlobContainerClient blobContainerClient, Path filePath, int blockSize) throws IOException {
    String fileName = filePath.getFileName().toString();
    BlockBlobClient blobClient = blobContainerClient.getBlobClient(fileName).getBlockBlobClient();

    FileInputStream fileStream = new FileInputStream(filePath.toString());
    List<String> blockIDArrayList = new ArrayList<>();
    byte[] buffer = new byte[blockSize];
    int bytesRead;

    while ((bytesRead = fileStream.read(buffer, 0, blockSize)) != -1) {

        try (ByteArrayInputStream stream = new ByteArrayInputStream(buffer)) {
            String blockID = Base64.getEncoder().encodeToString(UUID.randomUUID().toString().getBytes(StandardCharsets.UTF_8));

            blockIDArrayList.add(blockID);
            blobClient.stageBlock(blockID, stream, buffer.length);
        }
    }

    blobClient.commitBlockList(blockIDArrayList);

    fileStream.close();
}

Kaynaklar

Java için Azure Blob Depolama istemci kitaplığını kullanarak blobları karşıya yükleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

REST API işlemleri

Java için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık Java paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Blobları karşıya yüklemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemlerini kullanır:

  • Blobu Yerleştirme (REST API)
  • Blok Koy (REST API)

Kod örnekleri

İstemci kitaplığı kaynakları

Ayrıca bkz.