[英]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 。
對於第一種選擇,有幾個可用的會話提供程序 :
您可以繼續使用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.