Megosztás a következőn keresztül:


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 Hothozzáférési szintjét a következőre állíthatja be: , Coolvagy ArchiveCold. A hozzáférési szint Coldbeá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