Cloud.File.Storage.Manager.SharePoint 1.4.0

dotnet add package Cloud.File.Storage.Manager.SharePoint --version 1.4.0
                    
NuGet\Install-Package Cloud.File.Storage.Manager.SharePoint -Version 1.4.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Cloud.File.Storage.Manager.SharePoint" Version="1.4.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Cloud.File.Storage.Manager.SharePoint" Version="1.4.0" />
                    
Directory.Packages.props
<PackageReference Include="Cloud.File.Storage.Manager.SharePoint" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Cloud.File.Storage.Manager.SharePoint --version 1.4.0
                    
#r "nuget: Cloud.File.Storage.Manager.SharePoint, 1.4.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Cloud.File.Storage.Manager.SharePoint@1.4.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Cloud.File.Storage.Manager.SharePoint&version=1.4.0
                    
Install as a Cake Addin
#tool nuget:?package=Cloud.File.Storage.Manager.SharePoint&version=1.4.0
                    
Install as a Cake Tool

Cloud File Storage Manager

Provides complete implementation to handle easily cloud file storage operations like get informations about files, reading, downloadURL generation, file update, file move and delete. Primarily for SharePoint right now.

Configuration

Let's add a section to the appsettings.json

"SharePointStorageSettings": {
    // The SharePoint site URL (e.g., https://tenant.sharepoint.com/sites/sitename)
    "SiteUrl": "",
    "DocumentLibraryName": "",
    "TenantId": "",
    "ClientId": "",
    "ClientSecret": "",
    // Optional: The folder name where the files will be stored, like: "MainFolder/WorkFolder/Test"
    "WorkFolderPath": ""
}

In the application, configure this settings part

services.AddSingleton<ICloudFileStorageManager, SharePointCloudFileStorageManager>(services => new SharePointCloudFileStorageManager(new SharePointCloudFileStorageManagerOptions()
{
    SiteUrl = config.GetSection("SharePointStorageSettings").GetValue<string>("SiteUrl"),
    DocumentLibraryName = config.GetSection("SharePointStorageSettings").GetValue<string>("DocumentLibraryName"),
    TenantId = config.GetSection("SharePointStorageSettings").GetValue<string>("TenantId"),
    ClientId = config.GetSection("SharePointStorageSettings").GetValue<string>("ClientId"),
    ClientSecret = config.GetSection("SharePointStorageSettings").GetValue<string>("ClientSecret"),
    WorkFolderPath = config.GetSection("SharePointStorageSettings").GetValue<string>("WorkFolderPath")
}));

Azure App Registration configuration

Create an Azure AD app registration:

  1. Go to Azure Portal > App registrations
  2. Create a new registration
  3. Add API permissions: Sites.ReadWrite.All - Microsoft Graph (Manage / API permissions section)
  4. Create a client secret

Then, you have all the necessary values to connect your app to SharePoint and perform actions there.

Behaviour

Work folder

When WorkFolderPath is set, every path is relative to that folder of the document library. A path that already starts with the work folder segments (compared case-insensitively) is made relative to it, so MainFolder/WorkFolder/Test/report.csv and report.csv address the same file when WorkFolderPath is MainFolder/WorkFolder/Test. Any other path is used as-is below the work folder. Without WorkFolderPath the paths are relative to the root of the document library.

Paths

Both / and \ separate segments. A segment is rejected with an ArgumentException when it is empty or whitespace, consists only of dots and spaces, contains a control character or a colon (:), or does so after percent-decoding. A segment whose percent-decoded form contains / or \ is rejected as well. The colon is reserved by the Microsoft Graph path syntax.

Root protection

The work folder itself (or the library root when no work folder is set) and the RootDirectoryPath root cannot be deleted, moved, renamed or overwritten. These calls throw an InvalidOperationException, also when the path only consists of the work folder prefix.

Uploads

  • Files below 20 MB are uploaded in a single request, larger files with a Graph upload session in 3.2 MB chunks.
  • Non-seekable streams are first buffered to a temporary file, which is deleted when the upload finishes or fails.
  • Missing parent folders are created on upload and move. When a folder cannot be created, the InvalidOperationException keeps the original error as its inner exception.

Listing and file information

GetDirectoryContents follows the Graph paging links and returns every file and folder once. Folders are reported with Exists = true and IsDirectory = true.

Reading

ReadFile downloads the file into a temporary file that is deleted when the returned stream is disposed. When the download fails, the temporary file is removed right away.

GetDownloadUrl returns the pre-authenticated download link Microsoft Graph provides for the file (@microsoft.graph.downloadUrl). Graph keeps the link valid for about an hour; the validity argument is ignored. Anyone holding the link can download the file without signing in.

Not supported

Watch is not supported and throws a PlatformNotSupportedException.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.4.0 41 10/10/2026
1.3.0 653 7/21/2025
1.2.0 238 7/17/2025
1.1.0 348 7/15/2025
1.0.0 232 7/14/2025

- Listing no longer returns the first page twice
- Work folder and provider root protected against delete, move and overwrite
- Path segments containing a colon rejected
- Folder creation errors keep the inner exception
- Microsoft.Graph.Core 3.2.6