Implement a custom storage provider to save uploaded files to any backend:
Azure Blob, AWS S3, MongoDB GridFS, or your own storage. Implement the
IUploaderProvider interface and register it in
web.config appSettings.
Drag & drop files here, or paste from clipboard
<%-- 1. Implement the IUploaderProvider interface --%>
public class AzureBlobProvider : IUploaderProvider
{
private readonly CloudBlobContainer _container;
public AzureBlobProvider()
{
string connStr = ConfigurationManager
.AppSettings["AzureStorageConnection"];
var account = CloudStorageAccount.Parse(connStr);
var client = account.CreateCloudBlobClient();
_container = client.GetContainerReference("uploads");
_container.CreateIfNotExists();
}
public UploadResult Save(
Stream stream, string fileName, string contentType)
{
string blobName = Guid.NewGuid() + "/" + fileName;
var blob = _container.GetBlockBlobReference(blobName);
blob.Properties.ContentType = contentType;
blob.UploadFromStream(stream);
return new UploadResult
{
FileId = blobName,
FileName = fileName,
Url = blob.Uri.ToString()
};
}
public FileResult GetFile(string fileId)
{
var blob = _container.GetBlockBlobReference(fileId);
var ms = new MemoryStream();
blob.DownloadToStream(ms);
ms.Position = 0;
return new FileResult
{
Stream = ms,
ContentType = blob.Properties.ContentType
};
}
public void Delete(string fileId)
{
_container.GetBlockBlobReference(fileId)
.DeleteIfExists();
}
}
<%-- 2. Register in web.config appSettings --%>
<appSettings>
<add key="AjaxUploader:StorageProvider"
value="MyApp.Providers.AzureBlobProvider, MyApp" />
<add key="AzureStorageConnection"
value="DefaultEndpointsProtocol=https;AccountName=...;AccountKey=..." />
</appSettings>
<%-- 3. Or register in Global.asax Application_Start --%>
protected void Application_Start()
{
AjaxUploaderConfig.StorageProvider =
new AzureBlobProvider();
}