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
- Ez a cikk feltételezi, hogy már rendelkezik egy projekttel, amely a Java Azure Blob Storage ügyfélkódtárával működik együtt. A projekt beállításával, beleértve a csomagtelepítést, az irányelvek hozzáadását
import
és egy engedélyezett ügyfélobjektum létrehozását, olvassa el az Azure Storage és a Java használatának első lépéseit. - Az engedélyezési mechanizmusnak rendelkeznie kell a feltöltési művelet végrehajtásához szükséges engedélyekkel. További információkért tekintse meg az alábbi REST API-műveletek engedélyezési útmutatóját:
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.
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)
Kódminták
Ügyfélkódtár erőforrásai
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: