The IStore interface provides a unified API for interacting with various storage providers. However, not all providers support every method. Use this reference to understand the capabilities of your chosen provider across categories like system information, file listing, upload/download, directory manipulation, streaming, metadata, versioning, tagging, storage tiers, presigned URLs, and permissions.
Key Capability Groups:
- System Information:
GetClient, GetServer. - File Listing:
ListDirectory, ListObjects. - File Upload/Download:
GetObject, SetObject, GetBytes, SetBytes, DownloadObject, UploadObject, OpenRead, OpenWrite. - Directory Operations:
DownloadDirectory, UploadDirectory, IsFileSystem, DirectoryExists, CreateDirectory, DeleteDirectory, MoveDirectory. - File Manipulation:
ObjectExists, MoveObject, DeleteObject, DeleteObjects. - Metadata & Versioning:
GetObjectChecksum, GetObjectLength, GetObjectInfo, IsVersioned, ListObjectVersions, etc. - Advanced Features: Tagging (
IsTagged, GetObjectTags), Storage Tiers (IsTiered, GetObjectTier), and Presigned URLs (GetUploadUrl, GetDownloadUrl).
<table>
<thead
>
<tr>
<th>API</th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure.png" width="32"> <br><b>Azure<br>Blobs</b></th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/azure.png" width="32"> <br><b>Azure<br>Files</b></th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/aws.png" width="32"> <br><b>AWS S3</b></th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/gcp.png" width="32"> <br><b>GCP</b></th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/minio.png" width="32"> <br><b>MinIO</b></th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/mongo.png" width="32"> <br><b>Mongo</b></th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/alibaba.png" width="32"> <br><b>Alibaba</b></th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/ftp.png" width="32"> <br><b>FTP</b></th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/sftp.png" width="32"> <br><b>SFTP</b></th>
<th> <img src="https://raw.githubusercontent.com/robinrodricks/FluentStorage/develop/.github/providers/local.png" width="32"> <br><b>Disk</b></th>
</tr>
</thead>
<tbody
>
<tr>
<td colspan="11"><b>System information</b></td>
</tr>
<tr>
<td> GetClient</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> GetServer</td>
<td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>✔️</td><td>❌</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td colspan="11"><b>File listing</b></td>
</tr>
<tr>
<td> ListDirectory</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> ListObjects</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td colspan="11"><b>File upload / download</b></td>
</tr>
<tr>
<td> GetObject</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> SetObject</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> GetBytes</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> SetBytes</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> DownloadObject</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> UploadObject</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> OpenRead</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> OpenWrite</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<th>API</th>
<th><b>Azure<br>Blobs</b></th>
<th><b>Azure<br>Files</b></th>
<th><b>AWS S3</b></th>
<th><b>GCP</b></th>
<th><b>MinIO</b></th>
<th><b>Mongo</b></th>
<th><b>Alibaba</b></th>
<th><b>FTP</b></th>
<th><b>SFTP</b></th>
<th><b>Disk</b></th>
</tr>
<tr>
<td colspan="11"><b>Directory upload / download</b></td>
</tr>
<tr>
<td> DownloadDirectory</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> UploadDirectory</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td colspan="11"><b>Directory manipulation</b></td>
</tr>
<tr>
<td> IsFileSystem</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> DirectoryExists</td>
<td>✔️</td><td>❌</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> CreateDirectory</td>
<td>✔️</td><td>❌</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> DeleteDirectory</td>
<td>✔️</td><td>❌</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> MoveDirectory</td>
<td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<th>API</th>
<th><b>Azure<br>Blobs</b></th>
<th><b>Azure<br>Files</b></th>
<th><b>AWS S3</b></th>
<th><b>GCP</b></th>
<th><b>MinIO</b></th>
<th><b>Mongo</b></th>
<th><b>Alibaba</b></th>
<th><b>FTP</b></th>
<th><b>SFTP</b></th>
<th><b>Disk</b></th>
</tr>
<tr>
<td colspan="11"><b>File streaming / seeking</b></td>
</tr>
<tr>
<td> IsSeekable</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> OpenRange</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> OpenSeekable</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td colspan="11"><b>File manipulation</b></td>
</tr>
<tr>
<td> ObjectExists</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> MoveObject</td>
<td>✔️</td><td>❌</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> DeleteObject</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> DeleteObjects</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td colspan="11"><b>File metadata</b></td>
</tr>
<tr>
<td> GetObjectChecksum</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> GetObjectLength</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> GetObjectInfo</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> GetObjectsInfo</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> SetObjectInfo</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>❌</td><td>❌</td><td>✔️</td>
</tr>
<tr>
<td> SetObjectsInfo</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>❌</td><td>❌</td><td>✔️</td>
</tr>
<tr>
<th>API</th>
<th><b>Azure<br>Blobs</b></th>
<th><b>Azure<br>Files</b></th>
<th><b>AWS S3</b></th>
<th><b>GCP</b></th>
<th><b>MinIO</b></th>
<th><b>Mongo</b></th>
<th><b>Alibaba</b></th>
<th><b>FTP</b></th>
<th><b>SFTP</b></th>
<th><b>Disk</b></th>
</tr>
<tr>
<td colspan="11"><b>File versioning</b></td>
</tr>
<tr>
<td> IsVersioned</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> ListObjectVersions</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td> GetObjectVersion</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td> RestoreObjectVersion</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td> DeleteObjectVersion</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td colspan="11"><b>File tagging</b></td>
</tr>
<tr>
<td> IsTagged</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> GetObjectTags</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>✔️</td><td>🚫</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td> SetObjectTags</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>✔️</td><td>🚫</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td> DeleteObjectTags</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>✔️</td><td>🚫</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td colspan="11"><b>File storage tier</b></td>
</tr>
<tr>
<td> IsTiered</td>
<td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td><td>✔️</td>
</tr>
<tr>
<td> GetObjectTier</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td> SetObjectTier</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<th>API</th>
<th><b>Azure<br>Blobs</b></th>
<th><b>Azure<br>Files</b></th>
<th><b>AWS S3</b></th>
<th><b>GCP</b></th>
<th><b>MinIO</b></th>
<th><b>Mongo</b></th>
<th><b>Alibaba</b></th>
<th><b>FTP</b></th>
<th><b>SFTP</b></th>
<th><b>Disk</b></th>
</tr>
<tr>
<td colspan="11"><b>Presigned URL generation</b></td>
</tr>
<tr>
<td> GetUploadUrl</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>✔️</td><td>🚫</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td> GetDownloadUrl</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>✔️</td><td>🚫</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td> GetPresignedUrl</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>✔️</td><td>🚫</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td> GetObjectSas</td>
<td>✔️</td><td>🚫</td><td>✔️</td><td>✔️</td><td>✔️</td><td>🚫</td><td>✔️</td><td>🚫</td><td>🚫</td><td>🚫</td>
</tr>
<tr>
<td colspan="11"><b>File permissions</b></td>
</tr>
<tr>
<td> GetFilePermissions</td>
<td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>✔️</td><td>✔️</td><td>❌</td>
</tr>
<tr>
<td> SetFilePermissions</td>
<td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>❌</td><td>✔️</td><td>✔️</td><td>❌</td>
</tr>
</tbody>
</table>