Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erfahren Sie, wie Sie Java-Anwendungen entwickeln, die Azure Files zum Speichern von Daten verwenden. Azure Files ist ein verwalteter Dateifreigabedienst in der Cloud. Sie bietet vollständig verwaltete Dateifreigaben, auf die über die Standardprotokolle Server Message Block (SMB) und Network File System (NFS) zugegriffen werden kann. Azure Files bietet auch eine REST-API für den programmgesteuerten Zugriff auf Dateifreigaben.
In diesem Artikel erfahren Sie mehr über die verschiedenen Ansätze für die Entwicklung mit Azure Files in Java und wie Sie den Ansatz auswählen, der den Anforderungen Ihrer App am besten entspricht. Außerdem erfahren Sie, wie Sie eine einfache Konsolen-App erstellen, die mit Azure Files-Ressourcen interagiert.
Anwendungsbereich
| Verwaltungsmodell | Abrechnungsmodell | Medienebene | Redundanz | SMB | NFS |
|---|---|---|---|---|---|
| Microsoft.Storage | Bereitgestellt v2 | HDD (Standard) | Lokal (LRS) |
|
|
| Microsoft.Storage | Bereitgestellt v2 | HDD (Standard) | Zone (ZRS) |
|
|
| Microsoft.Storage | Bereitgestellt v2 | HDD (Standard) | Geografischer Raum (GRS) |
|
|
| Microsoft.Storage | Bereitgestellt v2 | HDD (Standard) | GeoZone (GZRS) |
|
|
| Microsoft.Storage | Bereitgestellt v1 | SSD (Premium) | Lokal (LRS) |
|
|
| Microsoft.Storage | Bereitgestellt v1 | SSD (Premium) | Zone (ZRS) |
|
|
| Microsoft.Storage | Nutzungsbasierte Bezahlung | HDD (Standard) | Lokal (LRS) |
|
|
| Microsoft.Storage | Nutzungsbasierte Bezahlung | HDD (Standard) | Zone (ZRS) |
|
|
| Microsoft.Storage | Nutzungsbasierte Bezahlung | HDD (Standard) | Geografischer Raum (GRS) |
|
|
| Microsoft.Storage | Nutzungsbasierte Bezahlung | HDD (Standard) | GeoZone (GZRS) |
|
|
Informationen zur Entwicklung von Java-Apps mit Azure Files
Azure Files bietet verschiedene Möglichkeiten für Java-Entwickler, auf Daten zuzugreifen und Ressourcen in Azure Files zu verwalten. Die folgende Tabelle enthält die Ansätze, fasst zusammen, wie sie funktionieren, und enthält Anleitungen zur Verwendung der einzelnen Ansätze:
| Vorgehensweise | Funktionsweise | Wann verwenden |
|---|---|---|
| Standard-Datei-I/O-Bibliotheken | Verwendet API-Aufrufe auf Betriebssystemebene über Azure-Dateifreigaben, die über SMB oder NFS eingebunden wurden. Wenn Sie eine Dateifreigabe mithilfe von SMB/NFS einbinden, können Sie Datei-E/A-Bibliotheken für eine Programmiersprache oder ein Framework verwenden, z. B. java.io und java.nio für Java. |
Sie verfügen über Branchen-Apps mit vorhandenem Code, der standarddatei-E/A verwendet, und Sie möchten keinen Code für die App neu schreiben, um mit einer Azure-Dateifreigabe zu arbeiten. |
| FileREST-API | Ruft https-Endpunkte direkt auf, um mit daten zu interagieren, die in Azure Files gespeichert sind. Stellt programmgesteuerte Kontrolle über Dateifreigaberessourcen bereit. Das Azure SDK stellt die Clientbibliothek für Dateifreigaben (com.azure.storage.file.share) bereit, die die FileREST-API nutzt, damit Sie mit FileREST-API-Vorgängen über vertraute Paradigmen der Java-Programmierung interagieren können. |
Sie erstellen Mehrwertige Clouddienste und -apps für Kunden und möchten erweiterte Features verwenden, die nicht über Standarddatei-E/A-Bibliotheken verfügbar sind. |
| REST-API des Speicherressourcenanbieters | Verwendet Azure Resource Manager (ARM) zum Verwalten von Speicherkonten und Dateifreigaben. Ruft REST-API-Endpunkte für verschiedene Ressourcenverwaltungsvorgänge auf. | Ihre App oder Ihr Dienst muss Ressourcenverwaltungsaufgaben ausführen, z. B. das Erstellen, Löschen oder Aktualisieren von Speicherkonten oder Dateifreigaben. |
Allgemeine Informationen zu diesen Ansätzen finden Sie unter Übersicht über die Anwendungsentwicklung mit Azure Files.
Dieser Artikel konzentriert sich auf die Arbeit mit Azure Files-Ressourcen mit den folgenden Ansätzen:
- Arbeiten mit einer Azure Files-Instanz, die Java-Datei-E/A-Bibliotheken verwenden: Binden Sie eine Dateifreigabe mithilfe von SMB oder NFS ein, und verwenden Sie Java-Datei-E/A-Bibliotheken, um mit Dateien und Verzeichnissen in der Freigabe zu arbeiten.
- Arbeiten Sie mit Azure Files mithilfe der Clientbibliothek "Dateifreigaben" für Java: Verwenden Sie die Clientbibliothek für Azure Storage-Dateifreigaben für Java, um mit Dateien und Verzeichnissen in einer Dateifreigabe zu arbeiten. Diese Clientbibliothek basiert auf der FileREST-API.
- Verwalten Sie Azure Files-Ressourcen mithilfe der Azure Storage-Verwaltungsbibliotheken: Verwenden Sie die Azure Storage-Verwaltungsbibliotheken, um Dateifreigaben und andere Ressourcen in Ihrem Speicherkonto zu verwalten. Die Verwaltungsbibliotheken basieren auf der REST-API des Azure Storage-Ressourcenanbieters.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Azure Storage-Konto – Erstellen eines Speicherkontos
- Java Development Kit (JDK), Version 8 oder höher
- Apache Maven wird in diesem Beispiel für das Projektmanagement verwendet.
Richten Sie Ihre Umgebung ein
Hinweis
In diesem Artikel wird das Maven-Buildtool zum Erstellen und Ausführen des Beispielcodes verwendet. Andere Buildtools, z. B. Gradle, arbeiten auch mit dem Azure SDK für Java zusammen.
Verwenden Sie Maven, um eine neue Konsolen-App zu erstellen oder ein vorhandenes Projekt zu öffnen. Führen Sie die folgenden Schritte aus, um Pakete zu installieren und die erforderlichen import Direktiven hinzuzufügen.
Pakete installieren
Öffnen Sie die Datei pom.xml in Ihrem Text-Editor. Installieren Sie die Pakete, indem Sie die BOM-Datei einschließen oder eine direkte Abhängigkeit einschließen.
BOM-Datei einfügen
Fügen Sie azure-sdk-bom hinzu, um eine Abhängigkeit von der neuesten Version der Bibliothek zu übernehmen. Ersetzen Sie im folgenden Codeausschnitt den {bom_version_to_target} Platzhalter durch die Versionsnummer. Die Verwendung von azure-sdk-bom verhindert, dass Sie die Version jeder einzelnen Abhängigkeit angeben müssen. Weitere Informationen zur BOM finden Sie im Azure SDK BOM README.
<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>
Fügen Sie der Gruppe der Abhängigkeiten das folgende Abhängigkeitselement hinzu: Die Azure-Identity-Abhängigkeit wird für kennwortlose Verbindungen mit Azure-Diensten benötigt. Beachten Sie, dass die Ressourcen-Manager-Artefakte nicht in der BOM-Datei enthalten sind, daher müssen Sie sie als direkte Abhängigkeiten hinzufügen.
<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>
Direkte Abhängigkeit einschließen
Um eine Abhängigkeit von einer bestimmten Version der Bibliothek zu übernehmen, fügen Sie ihrem Projekt die direkte Abhängigkeit hinzu:
<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>
Importdirektiven einschließen
Öffnen Sie dann Ihre Codedatei, und fügen Sie die erforderlichen import Direktiven hinzu. In diesem Beispiel fügen wir die folgenden Direktiven in der datei App.java hinzu:
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.*;
Wenn Sie die Java-Datei-E/A-Bibliotheken verwenden möchten, müssen Sie auch die folgenden Importdirektiven hinzufügen:
import java.io.*;
import java.nio.file.*;
Arbeiten mit Azure Files mithilfe von Java-Datei-E/A-Bibliotheken
Standarddatei-E/A-Bibliotheken sind die am häufigsten verwendete Methode für den Zugriff und die Arbeit mit Azure Files-Ressourcen. Wenn Sie eine Dateifreigabe mithilfe von SMB oder NFS einbinden, leitet Ihr Betriebssystem API-Anforderungen für das lokale Dateisystem um. Mit diesem Ansatz können Sie Standarddatei-E/A-Bibliotheken wie java.io und java.nio verwenden, um mit Dateien und Verzeichnissen in der Freigabe zu interagieren.
Erwägen Sie die Verwendung von Java-Datei-E/A-Bibliotheken, wenn Ihre App Folgendes erfordert:
- App-Kompatibilität: Ideal für Branchen-Apps mit vorhandenem Code, der bereits Java-Datei-E/A-Bibliotheken verwendet. Sie müssen Code nicht neu schreiben, damit die App mit einer Azure-Dateifreigabe arbeitet.
- Benutzerfreundlichkeit: Java-Datei-E/A-Bibliotheken sind von Entwicklern bekannt und einfach zu verwenden. Ein wichtiges Wertversprechen von Azure Files besteht darin, dass sie systemeigene Dateisystem-APIs über SMB und NFS verfügbar macht.
In diesem Abschnitt erfahren Sie, wie Sie Java-Datei-E/A-Bibliotheken verwenden, um mit Azure Files-Ressourcen zu arbeiten.
Weitere Informationen und Beispiele finden Sie in der folgenden Ressource:
Bereitstellen einer Dateifreigabe
Zur Verwendung von Java-Datei-E/A-Bibliotheken müssen Sie zuerst eine Dateifreigabe einbinden. Informationen zum Einbinden einer Dateifreigabe mithilfe von SMB oder NFS finden Sie in den folgenden Ressourcen:
- Bereitstellen einer SMB-Dateifreigabe unter Windows
- Bereitstellen einer SMB-Dateifreigabe unter Linux
- Bereitstellen einer NFS-Dateifreigabe unter Linux
In diesem Artikel verwenden Sie den folgenden Pfad zum Verweisen auf eine eingebundene SMB-Dateifreigabe unter Windows:
String fileSharePath = "Z:\\file-share";
Beispiel: Herstellen einer Verbindung mit einer Dateifreigabe und Aufzählen von Verzeichnissen mithilfe von Java-Datei-E/A-Bibliotheken
Das folgende Codebeispiel zeigt, wie Sie eine Verbindung mit einer Dateifreigabe herstellen und die Verzeichnisse in der Freigabe auflisten:
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());
}
Beispiel: Schreiben in eine Datei in einer Dateifreigabe mithilfe von Java-Datei-E/A-Bibliotheken
Das folgende Codebeispiel zeigt, wie Text in eine Datei geschrieben und angefügt wird:
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());
}
Beispiel: Sperren einer Datei in einer Dateifreigabe mithilfe von Java-Datei-E/A-Bibliotheken
SMB-Clients, die Dateifreigaben einbinden, können Sperrmechanismen des Dateisystems zum Verwalten des Zugriffs auf freigegebene Dateien nutzen.
Das folgende Codebeispiel zeigt, wie eine Datei in einer Dateifreigabe gesperrt wird:
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();
}
Beachten Sie bei der Verwendung von SMB und der FileREST-API, dass die FileREST-API Leases zum Verwalten von Dateisperren verwendet, während SMB Dateisystemsperren verwendet, die vom Betriebssystem verwaltet werden. Weitere Informationen zum Verwalten von Dateisperrinteraktionen zwischen SMB und der FileREST-API finden Sie unter Verwalten von Dateisperren.
Beispiel: Aufzählen von Datei-ACLs mithilfe von Java-Datei-E/A-Bibliotheken
Das folgende Codebeispiel zeigt, wie Sie Zugriffssteuerungslisten (ACCESS Control Lists, ACLs) für eine Datei aufzählen:
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());
}
Arbeiten mit Azure Files unter Verwendung der Clientbibliothek für Dateifreigaben für Java
Die FileREST-API bietet programmgesteuerten Zugriff auf Azure Files. Sie können HTTPS-Endpunkte aufrufen, um Vorgänge für Dateifreigaben, Verzeichnisse und Dateien auszuführen. Die FileREST-API wurde für hohe Skalierbarkeit und erweiterte Features entwickelt, die möglicherweise nicht über systemeigene Protokolle verfügbar sind. Das Azure SDK stellt Clientbibliotheken bereit, z. B. die Java-Clientbibliothek für Dateifreigaben, die auf der FileREST-API basiert.
Erwägen Sie die Verwendung der FileREST-API und der Dateifreigabe-Clientbibliothek, wenn Ihre Anwendung Folgendes erfordert:
- Erweiterte Features: Zugriffsvorgänge und Features, die nicht über systemeigene Protokolle verfügbar sind.
- Benutzerdefinierte Cloudintegrationen: Erstellen Sie benutzerdefinierte Mehrwertdienste wie Sicherung, Antivirensoftware oder Datenverwaltung, die direkt mit Azure Files interagieren.
- Leistungsoptimierung: Profitieren Sie von Leistungsvorteilen in szenarien mit hoher Skalierung mithilfe von Datenebenenvorgängen.
Die FileREST-API modelliert Azure Files als Eine Hierarchie von Ressourcen und wird für Vorgänge empfohlen, die auf Verzeichnis - oder Dateiebene ausgeführt werden. Sie sollten die REST-API des Speicherressourcenanbieters für Vorgänge bevorzugen, die auf Dateidienst - oder Dateifreigabeebene ausgeführt werden.
In diesem Abschnitt erfahren Sie, wie Sie die Clientbibliothek für Dateifreigaben für Java verwenden, um mit Azure Files-Ressourcen zu arbeiten.
Weitere Informationen und Beispiele finden Sie in den folgenden Ressourcen:
Autorisieren des Zugriffs und Erstellen eines Clients
Um eine App mit Azure Files zu verbinden, erstellen Sie ein ShareClient Objekt. Dieses Objekt ist Ihr Ausgangspunkt für die Arbeit mit Azure Files-Ressourcen. Die folgenden Codebeispiele zeigen, wie ein ShareClient Objekt mithilfe verschiedener Autorisierungsmechanismen erstellt wird.
Für die Autorisierung mit Microsoft Entra ID müssen Sie einen Sicherheitsprinzipal verwenden. Welche Art von Sicherheitsprinzipal Sie benötigen, hängt davon ab, wo Ihre App ausgeführt wird. Weitere Informationen zu Authentifizierungsszenarien finden Sie unter Azure-Authentifizierung mit Java und Azure Identity.
Damit Sie die Codebeispiele in diesem Artikel verwenden können, weisen Sie dem Sicherheitsprinzipal die integrierte Azure RBAC-Rolle Privilegierter Mitwirkender für Speicherdateidaten zu. Diese Rolle gewährt vollständigen Zugriff auf alle Daten mit Lese-, Schreib-, ACL-Modifizierungs- und Löschrechten in den Freigaben für alle konfigurierten Speicherkonten, unabhängig von den festgelegten NTFS-Berechtigungen auf Datei-/Verzeichnisebene. Weitere Informationen finden Sie unter Zugriff auf Azure-Dateifreigaben mit Microsoft Entra ID und Azure Files OAuth über REST.
Autorisieren des Zugriffs mithilfe von DefaultAzureCredential
Eine einfache und sichere Möglichkeit zum Autorisieren des Zugriffs und der Verbindung mit Azure Files ist das Abrufen eines OAuth-Tokens durch Erstellen einer DefaultAzureCredential-Instanz . Anschließend können Sie diese Anmeldeinformationen verwenden, um ein ShareClient Objekt zu erstellen.
Im folgenden Beispiel wird ein mithilfe von ShareClient autorisiertes DefaultAzureCredential-Objekt erstellt. Anschließend wird ein ShareDirectoryClient-Objekt erstellt, das mit einem Verzeichnis in der Freigabe verwendet werden kann:
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");
Wenn Sie genau wissen, welchen Anmeldeinformationstyp Sie zum Authentifizieren von Benutzern verwenden, können Sie ein OAuth-Token mithilfe anderer Klassen in der Azure Identity-Clientbibliothek für Java abrufen. Diese Klassen werden von der TokenCredential-Klasse abgeleitet.
Weitere Informationen zu den einzelnen Autorisierungsmechanismen finden Sie unter Auswählen, wie der Zugriff auf Dateidaten autorisiert werden soll.
Beispiel: Kopieren von Dateien mit der Clientbibliothek für Dateifreigaben
Sie können Dateien innerhalb einer Dateifreigabe oder zwischen Dateifreigaben kopieren, indem Sie die folgende Methode verwenden:
Sie können eine Datei in ein Ziel-BLOB kopieren, indem Sie die folgende Methode aus einem BlockBlobClient Objekt verwenden:
Das folgende Codebeispiel zeigt, wie eine Datei in eine Datei in einer anderen Dateifreigabe kopiert wird:
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());
Beispiel: Leasen einer Datei mithilfe der Clientbibliothek für Dateifreigaben
Eine Lease erzeugt eine Sperre für eine Datei, die durch Azure mithilfe einer Lease-ID verwaltet wird. Die Lease bietet einen Mechanismus zum Koordinieren des Zugriffs auf Dateien über mehrere Clients in einem verteilten System. Eine Lease für eine Datei bietet exklusiven Schreib- und Löschzugriff. Weitere Informationen zu Leasezuständen und -aktionen finden Sie unter Lease File.
Das folgende Codebeispiel zeigt, wie Sie einen Leaseclient erstellen, eine unendliche Dauer-Lease für eine Datei erwerben und die Lease freigeben:
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());
}
}
Beachten Sie bei der Verwendung von SMB und der FileREST-API, dass die FileREST-API Leases zum Verwalten von Dateisperren verwendet, während SMB Dateisystemsperren verwendet, die vom Betriebssystem verwaltet werden. Weitere Informationen zum Verwalten von Dateisperrinteraktionen zwischen SMB und der FileREST-API finden Sie unter Verwalten von Dateisperren.
Beispiel: Erstellen und Auflisten von Freigabemomentaufnahmen mithilfe der Clientbibliothek für Dateifreigaben
Freigabemomentaufnahmen sind schreibgeschützte Kopien einer Dateifreigabe zu einem bestimmten Zeitpunkt. Sie können eine Momentaufnahme einer Dateifreigabe erstellen und anschließend diese Momentaufnahme verwenden, um auf die Daten in der Freigabe zum Zeitpunkt der Momentaufnahmeerstellung zuzugreifen. Sie können auch alle Momentaufnahmen in einer Dateifreigabe auflisten und Freigabemomentaufnahmen löschen.
Das folgende Codebeispiel zeigt, wie Sie eine Freigabemomentaufnahme erstellen, die Momentaufnahmen in einer Dateifreigabe auflisten und die Verzeichnisstruktur in einer Freigabemomentaufnahme durchlaufen:
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());
}
}
}
Hinweis
OAuth-Token, etwa solche, die bei der Verwendung DefaultAzureCredential abgerufen werden, sind für Datenebenenvorgänge auf Dateifreigabeebene nicht zulässig. Für die Verwendung von Freigabemomentaufnahmen muss das Clientobjekt mithilfe des Kontoschlüssels autorisiert werden. Das ShareClient in diesem Codebeispiel erstellte Objekt verwendet eine Verbindungszeichenfolge, die den Kontoschlüssel enthält.
Das Speichern von Kontoschlüsseln oder Verbindungszeichenfolgen stellt ein Sicherheitsrisiko dar. Sie sollten diese nur verwenden, wenn die Microsoft Entra-Authentifizierung nicht verfügbar ist. Weitere Informationen zum sicheren Speichern von Kontoschlüsseln in Azure Key Vault finden Sie unter Azure Key Vault verwaltete Speicherkontoschlüssel.
Verwalten von Azure Files-Ressourcen mithilfe der Azure Storage-Verwaltungsbibliotheken
Die Azure Storage-Verwaltungsbibliotheken basieren auf der REST-API des Azure Storage-Ressourcenanbieters. Der Azure Storage-Ressourcenanbieter ist ein Dienst, der auf Azure Resource Manager basiert, und unterstützt sowohl deklarative Methoden (Vorlagen) als auch imperative Methoden (direkter API-Aufruf). Die REST-API des Azure Storage-Ressourcenanbieters bietet programmgesteuerten Zugriff auf Azure Storage-Ressourcen, einschließlich Dateifreigaben. Das Azure SDK stellt Verwaltungsbibliotheken bereit, die auf der REST-API des Azure Storage-Ressourcenanbieters aufbauen.
Die Verwaltungsbibliotheken werden für Vorgänge empfohlen, die auf Dateidienst - oder Dateifreigabeebene ausgeführt werden. In diesem Abschnitt erfahren Sie, wie Sie die Azure Storage-Verwaltungsbibliotheken zum Verwalten von Azure Files-Ressourcen verwenden.
Die Azure Storage-Verwaltungsbibliotheken basieren auf der REST-API des Azure Storage-Ressourcenanbieters. Der Azure Storage-Ressourcenanbieter ist ein Dienst, der auf Azure Resource Manager basiert, und unterstützt sowohl deklarative Methoden (Vorlagen) als auch imperative Methoden (direkter API-Aufruf). Die REST-API des Azure Storage-Ressourcenanbieters bietet programmgesteuerten Zugriff auf Azure Storage-Ressourcen, einschließlich Dateifreigaben. Das Azure SDK stellt Verwaltungsbibliotheken bereit, die auf der REST-API des Azure Storage-Ressourcenanbieters aufbauen.
Die Verwaltungsbibliotheken werden für Vorgänge empfohlen, die auf Dateidienst - oder Dateifreigabeebene ausgeführt werden. In diesem Abschnitt erfahren Sie, wie Sie die Azure Storage-Verwaltungsbibliotheken zum Verwalten von Azure Files-Ressourcen verwenden.
Beispiel: Erstellen einer Dateifreigabe mithilfe der Azure Storage-Verwaltungsbibliothek
Das folgende Codebeispiel zeigt, wie Sie ein Objekt auf oberster Ebene AzureResourceManager erstellen, den Speicherressourcenanbieter mit einem Abonnement registrieren und eine Dateifreigabe mithilfe der Azure Storage-Verwaltungsbibliothek erstellen:
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)
);
Sie können die Dateifreigabeeigenschaften mithilfe der FileShareInner-Klasse konfigurieren. Im vorherigen Beispiel wird gezeigt, wie das Freigabekontingent beim Erstellen der Dateifreigabe festgelegt wird. Um eine vorhandene Dateifreigabe zu aktualisieren, rufen Sie fileShare.update() auf und übergeben das FileShareInner-Objekt mit den Eigenschaften, die Sie aktualisieren möchten.
Hinweis
Zum Ausführen des Registrierungsvorgangs benötigen Sie Berechtigungen für die folgende Azure RBAC-Aktion: Microsoft.Storage/register/action. Diese Berechtigung ist in den integrierten Rollen "Mitwirkender" und "Besitzer" enthalten.
Beispiel: Dateifreigaben und Snapshots mit der Azure Storage-Verwaltungsbibliothek auflisten
Das folgende Codebeispiel zeigt, wie Dateifreigaben und Schnappschüsse in einem Speicherkonto aufgeführt werden.
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());
}
Nächste Schritte
Weitere Informationen zur Entwicklung mit Azure Files finden Sie in den folgenden Ressourcen: