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.
Gilt für: Entwickler
Verwenden Sie diesen Leitfaden, wenn Sie Inhalte von Azure Blob Storage nach SharePoint Embedded verschieben. Eine C#-Migrations-App liest Blobs mit dem Azure Storage SDK und lädt sie in einen SharePoint Embedded-Container mit Microsoft Graph hoch.
Tipp
Für die Migration von SharePoint- oder OneDrive-Quellen bietet SharePoint Embedded auch dedizierte Migrations-APIs , die allgemein auf dem Microsoft Graph-Endpunkt v1.0 (November 2025) verfügbar sind und die Migration des Dateiversionsverlaufs (Februar 2026) unterstützen. Das manuelle Beispiel in diesem Artikel eignet sich am besten, wenn Sie speziell aus Azure Blob Storage kopieren.
Vorbereiten der Authentifizierung
Für Azure Blob Storage wird im Beispiel eine SAS-URL auf Containerebene mit Read den Berechtigungen und List verwendet.
_containerClient = new BlobContainerClient(new Uri(_containerLevelSASUrl));
Für SharePoint Embedded verwendet das Beispiel delegierte Microsoft Graph-Bereiche User.Read und FileStorageContainer.Selected mit InteractiveBrowserCredential.
string[] scopes = { "User.Read", "FileStorageContainer.Selected" };
InteractiveBrowserCredentialOptions options = new InteractiveBrowserCredentialOptions()
{
ClientId = clientId,
RedirectUri = new Uri("http://localhost"),
};
InteractiveBrowserCredential credential = new InteractiveBrowserCredential(options);
_graphClient = new GraphServiceClient(credential, scopes, null);
Da im Beispiel mit einem http://localhost Umleitungs-URI verwendet InteractiveBrowserCredential wird, muss die Microsoft Entra ID App-Registrierung eine Mobile- und Desktopanwendungsplattform enthalten, die als Umleitungs-URI auflistethttp://localhost. Fügen Sie diese Plattform im Microsoft Entra Admin Center auf der Seite Authentifizierung der App-Registrierung hinzu, bevor Sie das Beispiel ausführen.
Abbildung 1: Hinzufügen einer Plattform für mobile Anwendungen und Desktopanwendungen mit dem http://localhost Umleitungs-URI, damit der interaktive Anmeldeflow das Token an die Migrations-App zurückgeben kann.
Für den Nutzen des Mandanten müssen die Anwendung und der Containertyp registriert sein. Das Beispiel erfordert auch eine SharePoint Embedded-Container-ID für das Ziel.
Auflisten von Quellblobs
Listen Sie Blobnamen aus dem Azure Blob Storage-Container auf, bevor Die Migration in die Warteschlange ausgeführt wird.
var blobs = new List<string>();
await foreach (var blobItem in _containerClient.GetBlobsAsync())
{
blobs.Add(blobItem.Name);
}
return blobs;
Azure Blob Storage verwendet einen flachen Namespace. Wenn Blobnamen enthalten /, analysieren Sie diese Segmente in SharePoint Embedded-Ordnern, oder laden Sie alle Dateien in den Containerstamm hoch.
Erstellen von Zielordnern
Im Beispiel wird ein Ordner auf oberster Ebene erstellt, der nach dem Azure Blob Storage Container benannt ist, und dann geschachtelte Ordner erstellt, während die einzelnen Blobnamen durchlaufen werden. Überprüfen Sie, ob ein vorhandenes Element vorhanden ist, bevor Sie einen Ordner erstellen.
var item = await _graphClient.Drives[_containerId].Items[parentFolderId].ItemWithPath(itemPath).GetAsync();
Erstellen Sie einen Ordner unter dem übergeordneten Ziel, bei dem das Konfliktverhalten auf failfestgelegt ist.
var folder = new DriveItem
{
Name = folderName,
Folder = new Folder(),
AdditionalData = new Dictionary<string, object>()
{
{ "@microsoft.graph.conflictBehavior", "fail" }
}
};
var createdFolder = await _graphClient.Drives[_containerId].Items[parentFolderId].Children.PostAsync(folder);
Hochladen von Dateien mit Graph-Sitzungen
Laden Sie jedes Blob in einen Stream herunter, setzen Sie die Streamposition zurück, erstellen Sie eine Uploadsitzung und laden Sie mit LargeFileUploadTask<DriveItem>hoch.
BlobClient blobClient = _containerClient.GetBlobClient(blobName);
MemoryStream memoryStream = new MemoryStream();
await blobClient.DownloadToAsync(memoryStream);
memoryStream.Position = 0;
int maxChunkSize = 320 * 1024;
var uploadSessionRequestBody = new CreateUploadSessionPostRequestBody()
{
AdditionalData = new Dictionary<string, object>
{
{ "@microsoft.graph.conflictBehavior", "fail" }
}
};
var uploadSession = await _graphClient.Drives[_containerId]
.Items[parentFolderId]
.ItemWithPath(fileName)
.CreateUploadSession
.PostAsync(uploadSessionRequestBody);
var fileUploadTask = new LargeFileUploadTask<DriveItem>(uploadSession, memoryStream, maxChunkSize, _graphClient.RequestAdapter);
IProgress<long> progress = new Progress<long>(prog => Console.WriteLine($"Uploaded {fileName} {prog} bytes"));
var uploadResult = await fileUploadTask.UploadAsync(progress);
Wird verwendet fail , wenn doppelte Dateien nicht überschrieben werden sollen. Ändern Sie das Konfliktverhalten erst, nachdem Sie Ersetzungs-, Umbenennungs- und Überwachungsregeln definiert haben.
Ausführen des Beispiels
Im Beispiel wird microsoft Graph SDK 5.56.0 Azure verwendet. Identity 1.12.0, Azure. Storage.Blobs 12.21.0, CommandLineParser 2.9.1 und Newtonsoft.Json 13.0.3.
dotnet run Program.cs -- --sasurl "<sas url>" --tenantid "<tenant id>" --clientid "<client id>" --containerid "<container id>" [ --blobfile "<file name>" --outputfile "<file name>" ]
Verwenden Sie die optionale Bloblistendatei für kontrollierte Batches und die optionale Ausgabedatei, um fehlerhafte Blobs für erneute Ausführungen zu erfassen.
Überprüfen von migrierten Inhalten
Vergleichen Sie die Anzahl der Quellblobs mit der Anzahl der Ziellaufwerkelemente. Überprüfen Sie Ordnerpfade, Dateigrößen, Uploadfehler, Duplikatbehandlung und erforderliche Metadaten. Öffnen Sie repräsentative Dateien über Ihre SharePoint Embedded-App, und überprüfen Sie dann Such- und Metadatenabfragen, nachdem die Indizierung abgeschlossen war.
Löschen Sie Quellblobs erst, wenn die Geschäftsinhaber das Migrationsergebnis genehmigen und die Aufbewahrungsanforderungen erfüllt sind.