Я следил за этим примером для загрузки больших файлов из веб-приложения MVC в Хранилище BLOB-объектов Azure по частям.
В этом примере первое действие контроллера создает ссылку на большой двоичный объект и сохраняет некоторые метаданные в сеансе:
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?
Если это повлияет на ответ, я бы хотел вызвать контроллер WebAPI из javascript, так что сеанса все равно нет.