【问题标题】:Azure blob storage - chunked file upload - caching data across postbacksAzure Blob 存储 - 分块文件上传 - 跨回发缓存数据
【发布时间】:2016-02-17 01:11:35
【问题描述】:

我一直在关注 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*);

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

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

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

【问题讨论】:

  • 完全绕过这个 MVC 层并从浏览器直接将文件上传到 blob 存储是否是一个可接受的解决方案?
  • 这是针对最终用户上传文件的网站,所以恐怕不是。

标签: c# azure asp.net-web-api azure-blob-storage azure-caching


【解决方案1】:

您有几个选择。第一个是继续使用 Session 对象和change the Session Provider(见下文)。第二个是write your own layer that would handle caching 为您提供诸如 Redis 之类的东西。无论哪种情况,currently recommended caching solution 都是 Redis

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

  • 在内存会话状态提供程序中 - 默认,但正如您提到的那样不能很好地扩展
  • Sql Server 会话状态提供程序 - 这会对性能产生影响,因为它会往返 SQL 数据库。
  • Distributed In Memory Session State Provider,例如 Redis Cache Session State Provider - 这是目前推荐的使用 Session State 的解决方案

使用 Redis 会话状态提供程序

你可以继续使用 Session 对象,并在 Web.Config 中将 Session Provider 切换为使用 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>

Microsoft Patterns and Practices Team 的这篇关于caching guidance in Azure 的文章包含大量关于这两种情况的信息。

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 2015-06-16
    • 2018-03-13
    • 2017-01-24
    • 2017-08-19
    • 2021-11-10
    • 2016-05-11
    • 2016-02-05
    • 2019-07-10
    相关资源
    最近更新 更多