C# Azure blob存储-分块文件上载-跨回发缓存数据
我一直在关注如何将大文件从MVC web应用程序分块上传到Azure blob存储 在本例中,第一个控制器操作创建一个blob引用,并在会话中存储一些元数据:C# Azure blob存储-分块文件上载-跨回发缓存数据,c#,azure,asp.net-web-api,azure-storage-blobs,azure-caching,C#,Azure,Asp.net Web Api,Azure Storage Blobs,Azure Caching,我一直在关注如何将大文件从MVC web应用程序分块上传到Azure blob存储 在本例中,第一个控制器操作创建一个blob引用,并在会话中存储一些元数据: var fileToUpload = new CloudFile() { BlockCount = blocksCount, FileName = fileName, Size = fileSize, Block
var fileToUpload = new CloudFile()
{
BlockCount = blocksCount,
FileName = fileName,
Size = fileSize,
BlockBlob = container.GetBlockBlobReference(fileName),
StartTime = DateTime.Now,
IsUploadCompleted = false,
UploadStatusMessage = string.Empty
};
Session.Add("CurrentFile", fileToUpload);
要允许每次连续呼叫从中断的位置开始,请执行以下操作:
CloudFile model = (CloudFile)Session["CurrentFile"];
model.BlockBlob.PutBlock(*new chunk stream*);
很明显,在教程中这样做是为了方便,但我不清楚应该如何做。对于可伸缩的云应用程序,我根本不想使用会话
我的问题是,在每次数据块上传时简单地提交并重写到blob存储是不是很好,如果不是,是否有适合Azure应用程序的缓存替代方案
如果它影响到答案,我想从javascript调用WebAPI控制器,这样就没有会话了。您有几个选项。第一种方法是继续使用会话对象和(请参阅下文)。第二种方法是为您提供诸如Redis之类的服务。在这两种情况下,最重要的是 对于第一个选项,有几个:
- 内存会话状态提供程序-Defualt,但正如您所提到的,它的扩展性不好
- Sql Server会话状态提供程序-这将对性能产生影响,因为它将往返于Sql数据库
- 分布式内存会话状态提供程序,如Redis Cache会话状态提供程序-这是当前推荐的使用会话状态的解决方案
<sessionStatemode="Custom" customProvider="MySessionStateStore">
<providers>
<!--Remove old session state info if currently configured.-->
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="<redis host url/ip here>" accessKey="<your access key here>" />
</providers>
对于这两种情况,我们都有大量的信息。完全绕过MVC层,从浏览器直接将文件上传到blob存储中,这是一种可以接受的解决方案吗?这是针对最终用户上传文件的网站,所以我恐怕不是。