Bagikan melalui


Mengunggah blob blok dengan Java

Artikel ini memperlihatkan cara mengunggah blob blok menggunakan pustaka klien Azure Storage untuk Java. Anda dapat mengunggah data ke blob blok dari jalur file, aliran, objek biner, atau string teks. Anda juga dapat mengunggah blob dengan tag indeks.

Prasyarat

  • Artikel ini mengasumsikan Anda sudah menyiapkan proyek untuk bekerja dengan pustaka klien Azure Blob Storage untuk Java. Untuk mempelajari tentang menyiapkan proyek Anda, termasuk penginstalan paket, menambahkan arahan import , dan membuat objek klien resmi, lihat Mulai menggunakan Azure Storage dan Java.
  • Mekanisme otorisasi harus memiliki izin untuk melakukan operasi unggahan. Untuk mempelajari lebih lanjut, lihat panduan otorisasi untuk operasi REST API berikut:

Mengunggah data ke blob blok

Untuk mengunggah blob blok dari aliran atau objek biner, gunakan metode berikut:

Untuk mengunggah blob blok dari jalur file, gunakan metode berikut:

Masing-masing metode ini dapat dipanggil menggunakan objek BlobClient atau objek BlockBlobClient .

Mengunggah blob blok dari jalur file lokal

Contoh berikut mengunggah file ke blob blok menggunakan BlobClient objek:

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());
    }
}

Mengunggah blob blok dari aliran

Contoh berikut mengunggah blob blok dengan membuat ByteArrayInputStream objek, lalu mengunggah objek stream tersebut:

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();
    }
}

Mengunggah blob blok dari objek BinaryData

Contoh berikut mengunggah BinaryData ke blob blok menggunakan BlobClient objek:

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));
}

Mengunggah blob blok dengan opsi konfigurasi

Anda dapat menentukan opsi konfigurasi pustaka klien saat mengunggah blob. Opsi ini dapat disetel untuk meningkatkan performa, meningkatkan keandalan, dan mengoptimalkan biaya. Contoh kode berikut menunjukkan cara menggunakan BlobUploadFromFileOptions untuk menentukan opsi konfigurasi saat memanggil metode pengunggahan. Jika Anda tidak mengunggah dari file, Anda dapat mengatur opsi serupa menggunakan BlobParallelUploadOptions pada metode pengunggahan.

Tentukan opsi transfer data saat diunggah

Anda dapat mengonfigurasi nilai di ParallelTransferOptions untuk meningkatkan performa operasi transfer data. Nilai berikut dapat disetel untuk unggahan berdasarkan kebutuhan aplikasi Anda:

  • blockSize: Ukuran blok maksimum untuk ditransfer untuk setiap permintaan. Anda dapat mengatur nilai ini dengan menggunakan metode setBlockSizeLong .
  • maxSingleUploadSize: Jika ukuran data kurang dari atau sama dengan nilai ini, data diunggah dalam satu taruh daripada dipecah menjadi potongan. Jika data diunggah dalam satu bidikan, ukuran blok diabaikan. Anda dapat mengatur nilai ini dengan menggunakan metode setMaxSingleUploadSizeLong .
  • maxConcurrency: Jumlah maksimum permintaan paralel yang dikeluarkan pada waktu tertentu sebagai bagian dari transfer paralel tunggal. Anda dapat mengatur nilai ini dengan menggunakan metode setMaxConcurrency .

Pastikan Anda memiliki arahan berikut import untuk digunakan ParallelTransferOptions untuk unggahan:

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

Contoh kode berikut menunjukkan cara mengatur nilai untuk ParallelTransferOptions dan menyertakan opsi sebagai bagian dari instans BlobUploadFromFileOptions . Nilai yang disediakan dalam sampel ini tidak dimaksudkan untuk menjadi rekomendasi. Untuk menyetel nilai-nilai ini dengan benar, Anda perlu mempertimbangkan kebutuhan spesifik aplikasi Anda.

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());
    }
}

Untuk mempelajari selengkapnya tentang menyetel opsi transfer data, lihat Penyetelan performa untuk unggahan dan unduhan dengan Java.

Mengunggah blob blok dengan tag indeks

Tag indeks blob mengategorikan data di akun penyimpanan Anda menggunakan atribut tag nilai kunci. Tag ini secara otomatis diindeks dan diekspos sebagai indeks multi-dimensi yang dapat dicari untuk menemukan data dengan mudah.

Contoh berikut mengunggah blob blok dengan tag indeks yang diatur menggunakan BlobUploadFromFileOptions:

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());
    }
}

Mengatur tingkat akses blob saat diunggah

Anda dapat mengatur tingkat akses blob saat diunggah dengan menggunakan kelas BlobUploadFromFileOptions . Contoh kode berikut menunjukkan cara mengatur tingkat akses saat mengunggah blob:

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());
    }
}

Mengatur tingkat akses hanya diperbolehkan untuk blob blok. Anda dapat mengatur tingkat akses untuk blob blok ke Hot, , CoolCold, atau Archive. Untuk mengatur tingkat akses ke Cold, Anda harus menggunakan versi pustaka klien minimum 12.21.0.

Untuk mempelajari selengkapnya tentang tingkat akses, lihat Gambaran umum tingkat akses.

Unggah blob blok dengan blok penahapan dan penerapan

Anda dapat memiliki kontrol yang lebih besar atas cara membagi unggahan menjadi blok dengan melakukan penahapan data secara manual. Ketika semua blok yang membentuk blob disiapkan, Anda dapat memasukkannya ke Blob Storage. Anda dapat menggunakan pendekatan ini untuk meningkatkan performa dengan mengunggah blok secara paralel.

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();
}

Sumber

Untuk mempelajari selengkapnya tentang mengunggah blob menggunakan pustaka klien Azure Blob Storage untuk Java, lihat sumber daya berikut ini.

Operasi REST API

Azure SDK untuk Java berisi pustaka yang dibangun di atas Azure REST API, memungkinkan Anda berinteraksi dengan operasi REST API melalui paradigma Java yang sudah dikenal. Metode pustaka klien untuk mengunggah blob menggunakan operasi REST API berikut:

Sampel kode

Sumber daya pustaka klien

Lihat juga