Blokkblob feltöltése Java használatával
Ez a cikk bemutatja, hogyan tölthet fel blokkblobot a Java Azure Storage ügyfélkódtárával. Adatokat feltölthet egy blokkblobba egy fájl elérési útjáról, egy streamből, egy bináris objektumból vagy egy szöveges sztringből. Indexcímkéket tartalmazó blobokat is feltölthet.
Előfeltételek
- Azure-előfizetés – hozzon létre egyet ingyenesen
- Azure Storage-fiók – tárfiók létrehozása
- Java Development Kit (JDK) 8-es vagy újabb verzió (a legjobb élmény érdekében a 17-es verziót javasoljuk)
- Ebben a példában az Apache Maven a projektkezeléshez használatos
Saját környezet beállítása
Ha nem rendelkezik meglévő projekttel, ez a szakasz bemutatja, hogyan állíthat be egy projektet a Java Azure Blob Storage ügyfélkódtárával való együttműködésre. További információ: Az Azure Blob Storage és a Java használatának első lépései.
A jelen cikkben szereplő példakódok használatához kövesse az alábbi lépéseket a projekt beállításához.
Feljegyzés
Ez a cikk a Maven buildelési eszközével hozza létre és futtatja a példakódot. Más buildelési eszközök, például a Gradle is együttműködnek a Java Azure SDK-val.
Csomagok telepítése
Nyissa meg a pom.xml
fájlt a szövegszerkesztőben. Telepítse a csomagokat a BOM-fájllal, vagy egy közvetlen függőséget is beleértve.
Importálási utasítások hozzáadása
Adja hozzá a következő import
-utasításokat:
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.*;
Engedélyezés
Az engedélyezési mechanizmusnak rendelkeznie kell a blob feltöltéséhez szükséges engedélyekkel. A Microsoft Entra-azonosítóval való engedélyezéshez (ajánlott) az Azure RBAC beépített szerepkörű Storage Blob Data Közreműködő vagy újabb szerepkörre van szüksége. További információkért tekintse meg a Put Blob (REST API) és a Put Block (REST API) engedélyezési útmutatóját.
Ügyfélobjektum létrehozása
Ha egy alkalmazást a Blob Storage-hoz szeretne csatlakoztatni, hozzon létre egy BlobServiceClient-példányt.
Az alábbi példa a BlobServiceClientBuilder használatával DefaultAzureCredential
hoz létre objektumotBlobServiceClient
, és bemutatja, hogyan hozhat létre tároló- és blobügyfeleket, ha szükséges:
// 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>");
Az ügyfélobjektumok létrehozásáról és kezeléséről további információt az adaterőforrásokat kezelő ügyfélobjektumok létrehozása és kezelése című témakörben talál.
Adatok feltöltése blokkblobba
Blokkblob streamből vagy bináris objektumból való feltöltéséhez használja a következő módszert:
Blokkblob fájl elérési útból való feltöltéséhez használja a következő módszert:
Mindegyik metódus meghívható BlobClient-objektummal vagy BlockBlobClient-objektummal.
Blokkblob feltöltése helyi fájl elérési útjáról
Az alábbi példa egy fájlt tölt fel egy blokkblobba egy BlobClient
objektum használatával:
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());
}
}
Blokkblob feltöltése streamből
Az alábbi példa egy objektum létrehozásával ByteArrayInputStream
feltölt egy blokkblobot, majd feltölti a streamobjektumot:
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();
}
}
Blokkblob feltöltése BinaryData-objektumból
Az alábbi példa egy objektum használatával tölt fel BinaryData
egy blokkblobba BlobClient
:
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));
}
Blokkblob feltöltése konfigurációs beállításokkal
Blob feltöltésekor megadhatja az ügyfélkódtár konfigurációs beállításait. Ezek a lehetőségek a teljesítmény javítása, a megbízhatóság növelése és a költségek optimalizálása érdekében hangolhatók. Az alábbi kódpéldák bemutatják, hogyan használható a BlobUploadFromFileOptions a konfigurációs beállítások megadására egy feltöltési módszer meghívásakor. Ha nem fájlból tölt fel, a BlobParallelUploadOptions használatával is megadhat hasonló beállításokat egy feltöltési módszeren.
Adatátviteli beállítások megadása feltöltéskor
A ParallelTransferOptionsban értékeket konfigurálhat az adatátviteli műveletek teljesítményének javítása érdekében. A feltöltésekhez az alábbi értékek hangolhatók az alkalmazás igényeinek megfelelően:
blockSize
: Az egyes kérések maximális blokkmérete. Ezt az értéket a setBlockSizeLong metódussal állíthatja be.maxSingleUploadSize
: Ha az adatok mérete kisebb vagy egyenlő ennél az értéknél, akkor a rendszer nem adattömbökre bontva, hanem egyetlen put-ban tölti fel őket. Ha az adatok feltöltése egyetlen lövéssel történik, a blokk mérete figyelmen kívül lesz hagyva. Ezt az értéket a setMaxSingleUploadSizeLong metódussal állíthatja be.maxConcurrency
: Az egy párhuzamos átvitel részeként adott időpontban kibocsátott párhuzamos kérelmek maximális száma. Ezt az értéket a setMaxConcurrency metódussal állíthatja be.
Győződjön meg arról, hogy rendelkezik a feltöltéshez használandó ParallelTransferOptions
alábbi import
irányelvekkel:
import com.azure.storage.blob.models.*;
Az alábbi kódpéldából megtudhatja, hogyan állíthatja be a ParallelTransferOptions értékeit, és hogyan adhatja meg a beállításokat egy BlobUploadFromFileOptions-példány részeként. Az ebben a mintában megadott értékek nem javaslatok. Ezeknek az értékeknek a megfelelő finomhangolásához figyelembe kell vennie az alkalmazás adott igényeit.
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());
}
}
Az adatátviteli beállítások finomhangolásáról további információt a Feltöltések és letöltések teljesítményhangolása a Java használatával című témakörben talál.
Blokkblob feltöltése indexcímkékkel
A blobindexcímkék kulcs-érték címkeattribútumok használatával kategorizálják a tárfiók adatait. Ezek a címkék automatikusan indexelhetők, és kereshető többdimenziós indexként jelennek meg az adatok egyszerű keresése érdekében.
Az alábbi példa egy BlobUploadFromFileOptions használatával beállított indexcímkéket tartalmazó blokkblobot tölt fel:
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());
}
}
Blob hozzáférési szintjének beállítása feltöltésre
A Blob hozzáférési szintje feltöltéskor a BlobUploadFromFileOptions osztály használatával állítható be. Az alábbi példakód bemutatja, hogyan állíthatja be a hozzáférési szintet egy blob feltöltésekor:
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());
}
}
A hozzáférési szint beállítása csak blokkblobok esetén engedélyezett. A blokkblobok Hot
hozzáférési szintjét a következőre állíthatja be: , Cool
vagy Archive
Cold
. A hozzáférési szint Cold
beállításához a 12.21.0-s minimális ügyfélkódtár-verziót kell használnia.
A hozzáférési szintekről további információt az Access-szintek áttekintésében talál.
Blokkblob feltöltése blokkok előkészítésével és véglegesítésével
Az egyes adatblokkok manuális előkészítésével nagyobb mértékben szabályozhatja a feltöltések blokkokra való felosztását. Amikor a blobokat alkotó összes blokkot előkészítette, véglegesítheti őket a Blob Storage-ban. Ezzel a megközelítéssel növelheti a teljesítményt blokkok párhuzamos feltöltésével.
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();
}
Források
Ha többet szeretne megtudni a blobok Java-hoz készült Azure Blob Storage-ügyfélkódtár használatával történő feltöltéséről, tekintse meg az alábbi erőforrásokat.
Kódminták
REST API-műveletek
Az Azure SDK for Java olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát ismert Java-paradigmákon keresztül. A blobok feltöltéséhez használt ügyfélkódtár-metódusok a következő REST API-műveleteket használják:
- Blob elhelyezése (REST API)
- Blokk elhelyezése (REST API)
Ügyfélkódtár erőforrásai
Lásd még
- Azure Blob-adatok kezelése és keresése blobindexcímkék használatával
- Blobindex-címkék használata az Azure Blob Storage-adatok kezeléséhez és kereséséhez
Kapcsolódó tartalom
- Ez a cikk a Java Blob Storage fejlesztői útmutatójának része. További információkért tekintse meg a Java-alkalmazás buildeléséhez kapcsolódó fejlesztői útmutatók teljes listáját.