簡體   English   中英

Azure Blob存儲-分塊文件上傳-跨回發緩存數據

[英]Azure blob storage - chunked file upload - caching data across postbacks

我一直在遵循這個示例 ,將大文件從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控制器,因此無論如何都沒有會話。

您有兩種選擇。 第一種是繼續使用Session對象並更改Session Provider (請參閱下文)。 第二步是編寫您自己的層,該層將為處理諸如Redis之類的緩存 無論哪種情況, 當前推薦的緩存解決方案都是Redis

對於第一種選擇,有幾個可用的會話提供程序

  • 在“內存會話狀態提供程序”中-Defualt,但正如您提到的那樣,擴展性不好
  • Sql Server會話狀態提供程序-這將對性能產生影響,因為它將往返SQL數據庫。
  • 分布式內存會話狀態提供程序,例如Redis緩存會話狀態提供程序- 這是當前推薦的使用會話狀態的解決方案

使用Redis會話狀態提供程序

您可以繼續使用Session對象,並在Web.Config中將Session Provider切換為使用Redis而不是在內存中。 首先從NuGet添加RedisSessionStateProvider軟件包,然后更新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模式和實踐團隊撰寫的有關Azure中緩存指導的文章包含有關這兩種情況的大量信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM