首页 文章

Azure blob存储 - 分块文件上传 - 跨回发缓存数据

提问于
浏览
1

我一直在关注this example,用于将大型文件从MVC Web应用程序上传到Azure blob存储中 .

在该示例中,第一个控制器操作创建blob引用并在Session中存储一些元数据:

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*);

显而易见,这是为了方便本教程,但对我来说应该如何完成并不明显 . 对于可扩展的 Cloud 应用程序,我根本不想使用会话 .

我的问题是,在每个块上传中简单地提交和重写blob存储是否完全没问题,如果没有,是否有适合Azure应用程序的缓存替代方案?

如果它影响答案,我想从javascript调用WebAPI控制器,所以无论如何都没有会话 .

1 回答

  • 0

    你有几个选择 . 第一种方法是继续使用Session对象和change the Session Provider(见下文) . 第二个是write your own layer that would handle caching给你像Redis这样的东西 . 无论哪种情况,currently recommended caching solution都是Redis .

    对于第一个选项,有几个Session Providers available

    • 在内存会话状态提供程序中 - Defualt但正如您所提到的那样不能很好地扩展

    • Sql Server会话状态提供程序 - 这会对性能产生影响,因为它会往返于SQL数据库 .

    • 分布式内存会话状态提供程序,例如Redis缓存会话状态提供程序 - This is the currently recommended solution for using the Session State .

    使用Redis会话状态提供程序

    您可以继续使用Session对象并在Web.Config中切换会话提供程序以使用Redis而不是内存 . 首先添加RedisSessionStateProvider Package from NuGet然后更新web.config:

    <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>
    

    caching guidance in Azurecaching guidance in Azure上的这篇文章有关于这两种情况的大量信息 .

相关问题