Udostępnij za pomocą


Develop for Azure Files with Java (Tworzenie oprogramowania dla usługi Azure Files przy użyciu języka Java)

Dowiedz się, jak tworzyć aplikacje Java korzystające z usługi Azure Files do przechowywania danych. Azure Files to zarządzana usługa udziału plików w chmurze. Zapewnia w pełni zarządzane udziały plików, które są dostępne za pośrednictwem standardowych protokołów SMB (Server Message Block) i Network File System (NFS). Usługa Azure Files udostępnia również interfejs API REST do programowego dostępu do udziałów plikowych.

W tym artykule przedstawiono różne podejścia do programowania za pomocą usługi Azure Files w języku Java oraz sposób wybierania podejścia, które najlepiej odpowiada potrzebom aplikacji. Dowiesz się również, jak utworzyć podstawową aplikację konsolową, która współdziała z zasobami usługi Azure Files.

Dotyczy

Model zarządzania Model rozliczania Poziom mediów Redundancja SMB NFS
Microsoft.Storage Przygotowana wersja 2 HDD (standardowa) Lokalne (LRS) Tak Nie
Microsoft.Storage Przygotowana wersja 2 HDD (standardowa) Strefa (ZRS) Tak Nie
Microsoft.Storage Przygotowana wersja 2 HDD (standardowa) Geo (GRS) Tak Nie
Microsoft.Storage Przygotowana wersja 2 HDD (standardowa) Strefa geograficzna (GZRS) Tak Nie
Microsoft.Storage Zaprovisionowana wersja 1 SSD klasy premium Lokalne (LRS) Tak Nie
Microsoft.Storage Zaprovisionowana wersja 1 SSD klasy premium Strefa (ZRS) Tak Nie
Microsoft.Storage Płać według zużycia HDD (standardowa) Lokalne (LRS) Tak Nie
Microsoft.Storage Płać według zużycia HDD (standardowa) Strefa (ZRS) Tak Nie
Microsoft.Storage Płać według zużycia HDD (standardowa) Geo (GRS) Tak Nie
Microsoft.Storage Płać według zużycia HDD (standardowa) Strefa geograficzna (GZRS) Tak Nie

Informacje o tworzeniu aplikacji w języku Java za pomocą usługi Azure Files

Usługa Azure Files oferuje deweloperom języka Java kilka sposobów uzyskiwania dostępu do danych i zarządzania zasobami w usłudze Azure Files. W poniższej tabeli wymieniono metody, podsumowano sposób ich działania i przedstawiono wskazówki dotyczące tego, kiedy należy używać poszczególnych metod:

Metoda Jak to działa Kiedy należy używać
Standardowe biblioteki we/wy plików Używa wywołań interfejsu API na poziomie systemu operacyjnego poprzez zamontowane zasoby plikowe platformy Azure, korzystając z protokołu SMB lub NFS. Podczas montowania udziału plików za pomocą protokołów SMB/NFS można użyć bibliotek wejścia/wyjścia plików dla języka programowania lub frameworku, takich jak java.io i java.nio dla języka Java. Masz aplikacje biznesowe z istniejącym kodem wykorzystującym standardowe operacje we/wy plików i nie chcesz przepisywać kodu, aby aplikacja działała z udostępnianiem plików Azure.
FileREST API Bezpośrednie wywołanie punktów końcowych HTTPS w celu interakcji z danymi przechowywanymi w usłudze Azure Files. Zapewnia programową kontrolę nad zasobami do udostępniania plików. Zestaw Azure SDK udostępnia bibliotekę klienta udziałów plików (com.azure.storage.file.share), która bazuje na interfejsie API FileREST, umożliwiając interakcję z operacjami interfejsu API FileREST za pomocą znanych paradygmatów języka programowania Java. Tworzysz usługi w chmurze i aplikacje w chmurze dla klientów i chcesz używać zaawansowanych funkcji niedostępnych za pośrednictwem standardowych bibliotek we/wy plików.
Interfejs REST API dostawcy zasobów przechowywania Używa usługi Azure Resource Manager (ARM) do zarządzania kontami magazynowymi i udostępnieniami plików. Wywołuje punkty końcowe interfejsu API REST dla różnych operacji zarządzania zasobami. Aplikacja lub usługa musi wykonywać zadania zarządzania zasobami, takie jak tworzenie, usuwanie lub aktualizowanie kont przechowywania lub udostępniania plików.

Aby uzyskać ogólne informacje na temat tych podejść, zobacz Omówienie tworzenia aplikacji w usłudze Azure Files.

Ten artykuł koncentruje się na pracy z zasobami usługi Azure Files przy użyciu następujących metod:

Wymagania wstępne

Konfigurowanie środowiska

Uwaga

W tym artykule użyto narzędzia kompilacji Maven do skompilowania i uruchomienia przykładowego kodu. Inne narzędzia kompilacji, takie jak Gradle, współpracują również z zestawem Azure SDK dla języka Java.

Użyj narzędzia Maven, aby utworzyć nową aplikację konsolową lub otworzyć istniejący projekt. Wykonaj następujące kroki, aby zainstalować pakiety i dodać niezbędne import dyrektywy.

Instalowanie pakietów

pom.xml Otwórz plik w edytorze tekstów. Zainstaluj pakiety, dołączając plik BOM lub uwzględniając bezpośrednią zależność.

Uwzględnij plik BOM

Dodaj element azure-sdk-bom, aby dodać zależność od najnowszej wersji biblioteki. W poniższym fragmencie kodu zastąp {bom_version_to_target} symbol zastępczy numerem wersji. Korzystanie z azure-sdk-bom eliminuje konieczność określania wersji każdej poszczególnej zależności. Aby dowiedzieć się więcej na temat BOM, zobacz README Azure SDK BOM.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>{bom_version_to_target}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Dodaj następujące elementy zależności do grupy zależności. Zależność azure-identity jest wymagana w przypadku połączeń bez hasła z usługami platformy Azure. Należy pamiętać, że artefakty usługi Resource Manager nie są uwzględnione w pliku BOM, dlatego należy dodać je jako bezpośrednie zależności.

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-file-share</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-identity</artifactId>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-core-management</artifactId>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager-storage</artifactId>
  <version>{package_version_to_target}</version>
</dependency>

Uwzględnij zależność bezpośrednią

Aby podjąć zależność od określonej wersji biblioteki, dodaj bezpośrednią zależność do projektu:

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-file-share</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-identity</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure.resourcemanager</groupId>
  <artifactId>azure-resourcemanager-storage</artifactId>
  <version>{package_version_to_target}</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-core-management</artifactId>
  <version>{package_version_to_target}</version>
</dependency>

Uwzględnij dyrektywy importu

Następnie otwórz plik kodu i dodaj niezbędne import dyrektywy. W tym przykładzie dodamy następujące dyrektywy w pliku App.java :

import com.azure.identity.*;
import com.azure.storage.file.share.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.models.*;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;

Jeśli planujesz używać bibliotek wejścia/wyjścia Java, musisz również dodać następujące dyrektywy importu:

import java.io.*;
import java.nio.file.*;

Praca z usługą Azure Files przy użyciu bibliotek we/wy plików Java

Standardowe biblioteki we/wy plików to najbardziej typowy sposób uzyskiwania dostępu do zasobów usługi Azure Files i pracy z nimi. Podczas montowania udziału plikowego za pomocą SMB lub NFS system operacyjny przekierowuje żądania API dotyczące lokalnego systemu plików. Takie podejście umożliwia korzystanie ze standardowych bibliotek we/wy plików, takich jak java.io i java.nio, do interakcji z plikami i katalogami w udziale.

Rozważ użycie bibliotek operacji wejścia/wyjścia na plikach Java, jeśli aplikacja wymaga:

  • Zgodność aplikacji: Idealne rozwiązanie dla aplikacji biznesowych z istniejącym kodem, który używa już bibliotek we/wy plików Java. Nie musisz ponownie pisać kodu, aby aplikacja działała z współdzieleniem plików Azure.
  • Łatwość użycia: Biblioteki we/wy plików Java są dobrze znane przez deweloperów i są łatwe w użyciu. Kluczową wartością usługi Azure Files jest to, że uwidacznia natywne interfejsy API systemu plików za pośrednictwem protokołu SMB i systemu plików NFS.

W tej sekcji dowiesz się, jak używać bibliotek we/wy plików Java do pracy z zasobami usługi Azure Files.

Aby uzyskać więcej informacji i przykładów, zobacz następujący zasób:

Instalowanie udziału plików

Aby użyć bibliotek we/wy pliku Java, należy najpierw zainstalować udział plików. Zapoznaj się z następującymi zasobami, aby uzyskać wskazówki dotyczące montowania udziału plików przy użyciu protokołu SMB lub NFS.

W tym artykule użyjemy następującej ścieżki, aby odwołać się do zamontowanego udziału plików SMB w systemie Windows:

String fileSharePath = "Z:\\file-share";

Przykład: połączenie z zasobem plików i wyliczanie katalogów przy użyciu bibliotek wejścia/wyjścia plików Java

W poniższym przykładzie kodu pokazano, jak nawiązać połączenie do zasobu udostępnionego i wyświetlić listę katalogów w nim:

import java.io.*;
import java.nio.file.*;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";

try {
    File directory = new File(fileSharePath);
    File[] dirs = directory.listFiles(File::isDirectory);
            
    if (dirs != null) {
        for (File dir : dirs) {
            System.out.println(dir.getName());
        }
        System.out.println(dirs.length + " directories found.");
    }
} catch (Exception e) {
    System.out.println("Error: " + e.getMessage());
}

Przykład: zapisywanie do pliku w zasobie współdzielonym przy użyciu bibliotek wejścia/wyjścia plików w języku Java

W poniższym przykładzie kodu pokazano, jak napisać i dołączyć tekst do pliku:

import java.io.*;
import java.nio.file.*;
import java.util.Arrays;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";
String fileName = "test.txt";

try {
    String textToWrite = "First line" + System.lineSeparator();
    Path filePath = Paths.get(fileSharePath, fileName);
        
    // Write initial content to file
    Files.write(filePath, textToWrite.getBytes());
    System.out.println("Initial text written to file");
        
    // Append additional lines to the file
    String[] textToAppend = { "Second line", "Third line" };
    Files.write(filePath, 
                Arrays.asList(textToAppend),
                StandardOpenOption.APPEND);
    System.out.println("Additional lines appended to file");
} catch (IOException ex) {
    System.out.println("Error writing to file: " + ex.getMessage());
}

Przykład: blokowanie pliku w zasobie udostępnionym przy użyciu bibliotek we/wy plików Java

Klienci SMB, którzy podłączają udziały plików, mogą używać mechanizmów blokowania systemu plików do zarządzania dostępem do udostępnionych plików.

Poniższy przykład kodu pokazuje, jak zablokować plik w udziale plików:

import java.io.*;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.file.*;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";
String fileName = "test.txt";
String filePath = Paths.get(fileSharePath, fileName).toString();

try (
    FileOutputStream fos = new FileOutputStream(filePath);
    FileChannel fileChannel = fos.getChannel()) {

    // Acquire an exclusive lock on this file
    FileLock lock = fileChannel.lock();

    System.out.println("File is locked.");

    // Perform file operations here

    // Release the lock
    lock.release();
    System.out.println("File lock released.");

} catch (Exception e) {
    e.printStackTrace();
}

W przypadku korzystania zarówno z protokołu SMB, jak i interfejsu API FileREST należy pamiętać, że interfejs API FileREST używa dzierżaw do zarządzania blokadami plików, podczas gdy protokół SMB używa blokad systemu plików zarządzanych przez system operacyjny. Aby dowiedzieć się więcej na temat zarządzania interakcjami blokowania plików między protokółem SMB i interfejsem API FileREST, zobacz Zarządzanie blokadami plików.

Przykład: wyliczanie list ACL plików przy użyciu bibliotek wejścia/wyjścia Java

Poniższy przykład kodu przedstawia sposób wyliczania list kontroli dostępu (ACL) dla pliku:

import java.nio.file.*;
import java.nio.file.attribute.AclEntry;
import java.nio.file.attribute.AclFileAttributeView;
import java.util.List;

// Add the following code to a new or existing function

String fileSharePath = "Z:\\file-share";
String fileName = "test.txt";
String filePath = Paths.get(fileSharePath, fileName).toString();

try {
    Path path = Paths.get(filePath);

    // Get the ACL view for the file
    AclFileAttributeView aclView = Files.getFileAttributeView(
            path, AclFileAttributeView.class);

    // Get the ACL entries
    List<AclEntry> aclEntries = aclView.getAcl();

    // List all access rules for the file
    for (AclEntry entry : aclEntries) {
        System.out.println("Identity: " + entry.principal().getName());
        System.out.println("Access Control Type: " + entry.type());
        System.out.println("File System Rights: " + entry.permissions());
        System.out.println();
    }

    System.out.println(aclEntries.size() + " ACL entries found.");
} catch (Exception ex) {
    System.out.println("Error: " + ex.getMessage());
}

Praca z usługą Azure Files przy użyciu biblioteki klienta „File Shares” dla języka Java.

Interfejs API FileREST zapewnia dostęp programowy do usługi Azure Files. Umożliwia wywoływanie punktów końcowych HTTPS w celu wykonywania operacji na zasobach plikowych, katalogach i plikach. Interfejs API FileREST został zaprojektowany z myślą o wysokiej skalowalności i zaawansowanych funkcjach, które mogą nie być dostępne za pośrednictwem protokołów natywnych. Zestaw Azure SDK udostępnia biblioteki klienta, takie jak biblioteka klienta udziałów plików dla języka Java, które są oparte na interfejsie API FileREST.

Rozważ użycie interfejsu API FileREST i biblioteki klienta dysku sieciowego, jeśli aplikacja wymaga:

  • Funkcje zaawansowane: Operacje dostępu i funkcje, które nie są dostępne za pośrednictwem protokołów natywnych.
  • Niestandardowe integracje z chmurą: Twórz niestandardowe usługi dodane do wartości, takie jak tworzenie kopii zapasowych, ochrony antywirusowej lub zarządzanie danymi, które współdziałają bezpośrednio z usługą Azure Files.
  • Optymalizacja wydajności: Skorzystaj z zalet wydajności w scenariuszach o dużej skali przy użyciu operacji płaszczyzny danych.

Interfejs API FileREST modeluje usługę Azure Files jako hierarchię zasobów i jest zalecany w przypadku operacji wykonywanych na poziomie katalogu lub pliku . Powinieneś preferować interfejs API REST dostawcy zasobów usługi Storage dla operacji wykonywanych na poziomie usługi plików lub udziału plików.

W tej sekcji dowiesz się, jak używać biblioteki klienta File Shares dla języka Java do zarządzania zasobami usługi Azure Files.

Więcej informacji i przykładów zawierają następujące zasoby:

Autoryzowanie dostępu i tworzenie klienta

Aby połączyć aplikację z usługą ShareClient Azure Files, utwórz obiekt. Ten obiekt jest punktem wyjścia do pracy z zasobami usługi Azure Files. W poniższych przykładach kodu pokazano, jak utworzyć ShareClient obiekt przy użyciu różnych mechanizmów autoryzacji.

Aby autoryzować się za pomocą identyfikatora Microsoft Entra, musisz użyć podmiotu zabezpieczeń. To, jakiego typu podmiot zabezpieczeń potrzebujesz, zależy od miejsca, w którym działa Twoja aplikacja. Aby dowiedzieć się więcej na temat scenariuszy uwierzytelniania, zobacz Uwierzytelnianie platformy Azure przy użyciu języka Java i tożsamości platformy Azure.

Aby pracować z przykładami kodu w tym artykule, przypisz wbudowaną rolę RBAC Uprzywilejowany współautor danych plików magazynu do podmiotu zabezpieczeń. Ta rola zapewnia pełny dostęp do odczytu, zapisu, modyfikowania list kontrolnych dostępu oraz usuwania danych we wszystkich udziałach dla skonfigurowanych kont magazynowych, niezależnie od uprawnień NTFS ustawionych na poziomie pliku lub katalogu. Aby uzyskać więcej informacji, zobacz Access Azure file shares using Microsoft Entra ID with Azure Files OAuth over REST (Uzyskiwanie dostępu do udziałów plików platformy Azure przy użyciu identyfikatora Entra firmy Microsoft za pomocą protokołu OAuth usługi Azure Files za pośrednictwem interfejsu REST).

Autoryzowanie dostępu za pomocą DefaultAzureCredential

Łatwym i bezpiecznym sposobem autoryzowania dostępu i nawiązywania połączenia z usługą Azure Files jest uzyskanie tokenu OAuth przez utworzenie wystąpienia DefaultAzureCredential . Następnie możesz użyć tego poświadczenia, aby utworzyć ShareClient obiekt.

Poniższy przykład tworzy obiekt ShareClient autoryzowany przy użyciu DefaultAzureCredential, a następnie tworzy obiekt ShareDirectoryClient do pracy z katalogiem w zasobie udostępnionym:

import com.azure.core.credential.TokenCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.file.share.*;

// Add the following code to a new or existing function

String accountName = "<account-name>";
String shareName = "<share-name>";
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();

// Create the ShareClient
ShareClient shareClient = new ShareClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(shareName)
    .credential(defaultAzureCredential)
    .buildClient();

// Create a client to interact with a directory in the share
ShareDirectoryClient directoryClient = shareClient.getDirectoryClient("sample-directory");

Jeśli wiesz dokładnie, którego typu poświadczeń używasz do uwierzytelniania użytkowników, możesz uzyskać token OAuth przy użyciu innych klas w bibliotece klienta tożsamości platformy Azure dla języka Java. Te klasy pochodzą z klasy TokenCredential .

Aby dowiedzieć się więcej na temat każdego z tych mechanizmów autoryzacji, zobacz Wybieranie sposobu autoryzowania dostępu do danych plików.

Przykład: kopiowanie plików przy użyciu biblioteki klienta dla udostępniania plików

Pliki w udziale plików lub między udziałami plików można skopiować przy użyciu następującej metody:

Plik można skopiować przy użyciu następującej metody z obiektu BlockBlobClient do docelowego obiektu blob.

W poniższym przykładzie kodu pokazano, jak skopiować plik do pliku w innym udziale plików:

import java.time.*;
import java.util.*;

import com.azure.core.credential.TokenCredential;
import com.azure.core.util.polling.*;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;

// Add the following code to a new or existing function

String accountName = "<account-name>";
String srcShareName = "src-file-share";
String destShareName = "dest-file-share";
String srcFilePath = "src/path/to/file";
String destFilePath = "dest/path/to/file";

TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();

ShareFileClient srcShareFileClient = new ShareFileClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(srcShareName)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .resourcePath(srcFilePath)
    .credential(defaultAzureCredential)
    .buildFileClient();

ShareFileClient destShareFileClient = new ShareFileClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(destShareName)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .resourcePath(destFilePath)
    .credential(defaultAzureCredential)
    .buildFileClient();

// Copy the file from the source share to the destination share
SyncPoller<ShareFileCopyInfo, Void> poller = destShareFileClient
        .beginCopy(srcShareFileClient.getFileUrl(),
                Collections.singletonMap("file", "metadata"),
                Duration.ofSeconds(2));

final PollResponse<ShareFileCopyInfo> pollResponse = poller.poll();
final ShareFileCopyInfo value = pollResponse.getValue();
System.out.printf("Copy source: %s. Status: %s.%n", value.getCopySourceUrl(), value.getCopyStatus());

Przykład: dzierżawa pliku przy użyciu biblioteki klienta udostępniania plików

Dzierżawa tworzy blokadę pliku zarządzanego przez platformę Azure za pośrednictwem identyfikatora dzierżawy. Dzierżawa zapewnia mechanizm koordynowania dostępu do plików między wieloma klientami w systemie rozproszonym. Dzierżawa pliku zapewnia wyłączny dostęp do zapisu i usuwania. Aby dowiedzieć się więcej o stanach dzierżawy i akcjach, zobacz Plik dzierżawy.

Poniższy przykład kodu pokazuje, jak utworzyć klienta najmu, uzyskać nieskończony czas trwania najmu na plik i zwolnić najem.

import com.azure.core.credential.TokenCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;
import com.azure.storage.file.share.specialized.*;

// Add the following code to a new or existing function

String accountName = "<account-name>";
String shareName = "sample-file-share";
String filePath = "path/to/file";
        
TokenCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();

ShareFileClient fileClient = new ShareFileClientBuilder()
    .endpoint(String.format("https://%s.file.core.windows.net", accountName))
    .shareName(shareName)
    .shareTokenIntent(ShareTokenIntent.BACKUP)
    .resourcePath(filePath)
    .credential(defaultAzureCredential)
    .buildFileClient();

// Get a ShareLeaseClient
ShareLeaseClient fileLeaseClient = new ShareLeaseClientBuilder()
        .fileClient(fileClient)
        .shareTokenIntent(ShareTokenIntent.BACKUP)
        .buildClient();
        
try {
    // Acquire a lease on the file with infinite duration
    fileLeaseClient.acquireLease();
    System.out.println("Lease acquired successfully");
            
    // Do something with the file

} catch (Exception e) {
    System.err.println("Error: " + e.getMessage());
} finally {
    // Release the lease when finished
    try {
        fileLeaseClient.releaseLease();
        System.out.println("Lease released successfully.");
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}

W przypadku korzystania zarówno z protokołu SMB, jak i interfejsu API FileREST należy pamiętać, że interfejs API FileREST używa dzierżaw do zarządzania blokadami plików, podczas gdy protokół SMB używa blokad systemu plików zarządzanych przez system operacyjny. Aby dowiedzieć się więcej na temat zarządzania interakcjami blokowania plików między protokółem SMB i interfejsem API FileREST, zobacz Zarządzanie blokadami plików.

Przykład: Tworzenie i wyświetlanie listy migawek udziałów plików przy użyciu biblioteki klienta do obsługi udziałów plików

Migawki udziałów plików to kopie tylko do odczytu danej wersji udziału plików w określonym momencie. Możesz utworzyć migawkę udziału plików, a następnie użyć tej migawki, aby uzyskać dostęp do danych w udziale w chwili jej utworzenia. Można również wyświetlić listę wszystkich migawek w udziale plików oraz usunąć migawki udziału plików.

Poniższy przykład kodu pokazuje, jak utworzyć migawkę udziału, wyświetlić listę migawek udziału plików oraz przejść przez drzewo katalogów w migawce udziału.

import com.azure.storage.file.share.*;
import com.azure.storage.file.share.models.*;

// Add the following code to a new or existing function

public static void main(String[] args) {
    String connectionString = "<connection-string>";

    // Create a ShareServiceClient from which you can create clients for specific shares
    ShareServiceClient shareServiceClient = new ShareServiceClientBuilder()
    .connectionString(connectionString)
        .buildClient();
        
    // Get a client for a specific share
    ShareClient shareClient = shareServiceClient.getShareClient("sample-file-share");

    try {
        // Create a snapshot
        ShareSnapshotInfo snapshotInfo = shareClient.createSnapshot();
        System.out.println("Snapshot created: " + snapshotInfo.getSnapshot());

        // List snapshots in a share
        ListSharesOptions options = new ListSharesOptions()
            .setIncludeSnapshots(true);
                
        for (ShareItem shareItem : shareServiceClient.listShares(options, null, null)) {
            if (shareItem.getSnapshot() != null) {
                System.out.println("Share: " + shareItem.getName() + 
                    " (Snapshot: " + shareItem.getSnapshot() + ")");
            }
        }

        // List directories and files in a share snapshot
        String snapshotTimestamp = snapshotInfo.getSnapshot();
        ShareClient shareSnapshot = shareClient.getSnapshotClient(snapshotTimestamp);
        ShareDirectoryClient rootDir = shareSnapshot.getRootDirectoryClient();

        listDirectoryTree(rootDir);
            
    } catch (Exception e) {
        System.err.println("Error: " + e.getMessage());
    }
 }
    
private static void listDirectoryTree(ShareDirectoryClient directory) {
    // List all files and directories in current directory
    for (ShareFileItem fileItem : directory.listFilesAndDirectories()) {
        if (fileItem.isDirectory()) {
            System.out.println("Directory: " + fileItem.getName());
            // Recursively list subdirectory contents
            listDirectoryTree(directory.getSubdirectoryClient(fileItem.getName()));
        } else {
            System.out.println("File: " + fileItem.getName());
        }
    }
}

Uwaga

Tokeny OAuth, takie jak te uzyskane podczas korzystania z DefaultAzureCredential, nie są dozwolone do operacji na płaszczyźnie danych na poziomie zasobu współdzielenia plików. Aby pracować z migawkami udziałów, obiekt klienta musi być autoryzowany za pomocą klucza konta. Obiekt ShareClient utworzony w tym przykładzie kodu używa parametrów połączenia, które zawierają klucz konta.

Przechowywanie kluczy konta lub parametrów połączenia stanowi zagrożenie bezpieczeństwa. Należy ich używać tylko wtedy, gdy uwierzytelnianie microsoft Entra nie jest dostępne. Aby dowiedzieć się więcej na temat bezpiecznego przechowywania kluczy kont w usłudze Azure Key Vault, zobacz About Azure Key Vault managed storage account keys (Informacje o kluczach konta zarządzanego magazynu usługi Azure Key Vault).

Zarządzanie zasobami usługi Azure Files przy użyciu bibliotek zarządzania usługi Azure Storage

Biblioteki zarządzania usługi Azure Storage są oparte na interfejsie API REST dostawcy zasobów usługi Azure Storage. Dostawca zasobów usługi Azure Storage jest usługą opartą na usłudze Azure Resource Manager i obsługuje metody deklaratywne (szablony) i imperatywne (bezpośrednie wywołanie interfejsu API). Interfejs API REST dostawcy zasobów usługi Azure Storage zapewnia dostęp programistyczny do zasobów usługi Azure Storage, w tym udziałów plików. Zestaw Azure SDK udostępnia biblioteki zarządzania oparte na interfejsie API REST dostawcy zasobów usługi Azure Storage.

Biblioteki zarządzania są zalecane w przypadku operacji wykonywanych na poziomie usługi plików lub udziału plików . W tej sekcji dowiesz się, jak zarządzać zasobami usługi Azure Files przy użyciu bibliotek zarządzania usługi Azure Storage.

Biblioteki zarządzania usługi Azure Storage są oparte na interfejsie API REST dostawcy zasobów usługi Azure Storage. Dostawca zasobów usługi Azure Storage jest usługą opartą na usłudze Azure Resource Manager i obsługuje metody deklaratywne (szablony) i imperatywne (bezpośrednie wywołanie interfejsu API). Interfejs API REST dostawcy zasobów usługi Azure Storage zapewnia dostęp programistyczny do zasobów usługi Azure Storage, w tym udziałów plików. Zestaw Azure SDK udostępnia biblioteki zarządzania oparte na interfejsie API REST dostawcy zasobów usługi Azure Storage.

Biblioteki zarządzania są zalecane w przypadku operacji wykonywanych na poziomie usługi plików lub udziału plików . W tej sekcji dowiesz się, jak zarządzać zasobami usługi Azure Files przy użyciu bibliotek zarządzania usługi Azure Storage.

Przykład: tworzenie udziału plików przy użyciu biblioteki zarządzania Azure Storage

W poniższym przykładzie kodu pokazano, jak utworzyć obiekt najwyższego poziomu AzureResourceManager, zarejestrować dostawcę zasobów Storage w subskrypcji oraz jak za pomocą biblioteki zarządzania Azure Storage utworzyć udział plików.

import com.azure.identity.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.fluent.*;
import com.azure.resourcemanager.storage.fluent.models.*;

import com.azure.core.credential.TokenCredential;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;

// Add the following code to a new or existing function

String subscriptionID = "<subscription-id>";
String rgName = "<resource-group-name>";
String saName = "<storage-account-name>";
TokenCredential credential = new DefaultAzureCredentialBuilder().build();
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);

AzureResourceManager armClient = AzureResourceManager
        .configure()
        .authenticate(credential, profile)
        .withSubscription(subscriptionID);

// Check the registration state of the resource provider and register, if needed
if (armClient.providers().getByName("Microsoft.Storage").registrationState() == "NotRegistered")
    armClient.providers().register("Microsoft.Storage");

// Create a new file share

StorageManagementClient storageManagementClient = armClient.storageAccounts().manager().serviceClient();
FileSharesClient fileShare = storageManagementClient.getFileShares();

String shareName = "sample-file-share";
int quotaInGB = 1;
        
// Create the file share
fileShare.create(
    rgName,
    saName,
    shareName,
    new FileShareInner()
        .withShareQuota(quotaInGB)
);

Właściwości udziału plików można skonfigurować przy użyciu klasy FileShareInner . W poprzednim przykładzie pokazano, jak ustawić limit przydziału na udostępnianie podczas tworzenia udostępniania plików. Aby zaktualizować istniejący udział plików, wywołaj fileShare.update() i przekaż obiekt FileShareInner z właściwościami, które chcesz zaktualizować.

Uwaga

Aby wykonać operację rejestrowania, musisz mieć uprawnienia do następującej akcji RBAC platformy Azure: Microsoft.Storage/register/action. To uprawnienie jest uwzględnione w wbudowanych rolach Współautora i Właściciela.

Przykład: Wyświetlanie listy udziałów plikowych i migawek przy użyciu biblioteki zarządzania Azure Storage

Poniższy przykład kodu pokazuje, jak wyświetlić listę udziałów plików i migawek na koncie magazynowym.

import com.azure.identity.*;
import com.azure.resourcemanager.*;
import com.azure.resourcemanager.storage.fluent.*;
import com.azure.resourcemanager.storage.fluent.models.*;

import com.azure.core.credential.TokenCredential;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.management.*;
import com.azure.core.management.profile.*;
import com.azure.core.util.Context;

// Add the following code to a new or existing function

String subscriptionID = "<subscription-id>";
String rgName = "<resource-group-name>";
String saName = "<storage-account-name>";
TokenCredential credential = new DefaultAzureCredentialBuilder().build();
AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);

AzureResourceManager armClient = AzureResourceManager
        .configure()
        .authenticate(credential, profile)
        .withSubscription(subscriptionID);

// Check the registration state of the resource provider and register, if needed
if (armClient.providers().getByName("Microsoft.Storage").registrationState() == "NotRegistered")
    armClient.providers().register("Microsoft.Storage");

StorageManagementClient storageManagementClient = armClient.storageAccounts().manager().serviceClient();
FileSharesClient fileShare = storageManagementClient.getFileShares();

// List all file shares and include snapshots

PagedIterable<FileShareItemInner> fileShares = fileShare.list(
    rgName,               // resource group name
    saName,               // storage account name
    null,                 // maxpagesize
    null,                 // filter
    "snapshots",          // expand to include snapshots
    Context.NONE);        // context

for (FileShareItemInner fileShareItem : fileShares) {
    System.out.println("File share name: " + fileShareItem.name());
    System.out.println("File share quota: " + fileShareItem.shareQuota());
}

Następne kroki

Aby uzyskać więcej informacji o programowaniu za pomocą usługi Azure Files, zobacz następujące zasoby: