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
- Langganan Azure - buat akun secara gratis
- Akun penyimpanan Azure - buat akun penyimpanan
- Java Development Kit (JDK) versi 8 atau yang lebih baru (kami merekomendasikan versi 17 untuk pengalaman terbaik)
- Apache Maven digunakan untuk manajemen proyek dalam contoh ini
Menyiapkan lingkungan Anda
Jika Anda tidak memiliki proyek yang sudah ada, bagian ini memperlihatkan kepada Anda cara menyiapkan proyek untuk bekerja dengan pustaka klien Azure Blob Storage untuk Java. Untuk informasi selengkapnya, lihat Mulai menggunakan Azure Blob Storage dan Java.
Untuk bekerja dengan contoh kode dalam artikel ini, ikuti langkah-langkah ini untuk menyiapkan proyek Anda.
Catatan
Artikel ini menggunakan alat build Maven untuk membangun dan menjalankan kode contoh. Alat build lainnya, seperti Gradle, juga bekerja dengan Azure SDK untuk Java.
Memasang paket
Buka file pom.xml
di editor teks Anda. Instal paket dengan menyertakan file BOM, atau termasuk dependensi langsung.
Menambahkan pernyataan impor
Tambahkan pernyataan import
berikut:
import com.azure.core.http.rest.*;
import com.azure.core.util.BinaryData;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import com.azure.storage.blob.options.BlobUploadFromFileOptions;
import com.azure.storage.blob.specialized.*;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.time.Duration;
import java.util.*;
Authorization
Mekanisme otorisasi harus memiliki izin yang diperlukan untuk mengunggah blob. Untuk otorisasi dengan MICROSOFT Entra ID (disarankan), Anda memerlukan peran bawaan Azure RBAC Kontributor Data Blob Penyimpanan atau yang lebih tinggi. Untuk mempelajari lebih lanjut, lihat panduan otorisasi untuk Put Blob (REST API) dan Put Block (REST API).
Membuat objek klien
Untuk menyambungkan aplikasi ke Blob Storage, buat instans BlobServiceClient.
Contoh berikut menggunakan BlobServiceClientBuilder untuk membangun BlobServiceClient
objek menggunakan DefaultAzureCredential
, dan menunjukkan cara membuat klien kontainer dan blob, jika diperlukan:
// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint("https://<storage-account-name>.blob.core.windows.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
// If needed, you can create a BlobContainerClient object from the BlobServiceClient
BlobContainerClient containerClient = blobServiceClient
.getBlobContainerClient("<container-name>");
// If needed, you can create a BlobClient object from the BlobContainerClient
BlobClient blobClient = containerClient
.getBlobClient("<blob-name>");
Untuk mempelajari selengkapnya tentang membuat dan mengelola objek klien, lihat Membuat dan mengelola objek klien yang berinteraksi dengan sumber daya data.
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
, , Cool
Cold
, 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.
Sampel kode
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:
- Memasukkan Blob (REST API)
- Put Block (REST API)
Sumber daya pustaka klien
Lihat juga
- Mengelola dan menemukan data Azure Blob dengan tag indeks blob
- Menggunakan tag indeks blob untuk mengelola dan menemukan data di Azure Blob Storage
Konten terkait
- Artikel ini adalah bagian dari panduan pengembang Blob Storage untuk Java. Untuk mempelajari lebih lanjut, lihat daftar lengkap artikel panduan pengembang di Membangun aplikasi Java Anda.