Я играл с сервисом хранения Azure Blob для сохранения/восстановления файлов в контексте веб-страницы, которая будет размещаться на веб-страницах Azure.
В процессе обучения я пришел с двумя решениями; первый в основном использует DownloadToStream
, который делает то же самое, но с FileStream
. В этом случае я должен написать файл на сервере, прежде чем вернуть его пользователю.
public static Stream GetFileContent(string fileName, HttpContextBase context)
{
CloudBlobContainer container = GetBlobContainer();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);
Stream fileStream = new FileStream(
context.Server.MapPath("~/App_Data/files/" + fileName), FileMode.Create);
blockBlob.DownloadToStream(fileStream);
fileStream.Close();
return File.OpenRead(context.Server.MapPath("~/App_Data/files/" + fileName));
}
public ActionResult Download(string fileName)
{
byte[] fileContent = MyFileContext.GetFileContent(fileName);
return File(fileContent, "application/zip", fileName);
}
С другой стороны, я использовал функцию DownloadToByteArray
с записью содержимого Blob в массив байтов, инициализированный размером файла Blob.
public static byte[] GetFileContent(string fileName)
{
CloudBlobContainer container = GetBlobContainer();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);
blockBlob.FetchAttributes();
long fileByteLength = blockBlob.Properties.Length;
byte[] fileContent = new byte[fileByteLength];
for (int i = 0; i < fileByteLength; i++)
{
fileContent[i] = 0x20;
}
blockBlob.DownloadToByteArray(fileContent,0);
return fileContent;
}
public ActionResult Download(string fileName)
{
byte[] fileContent = MyFileContext.GetFileStream(fileName);
return File(fileContent, "application/zip", fileName);
}
Когда я смотрю на оба варианта, я вижу, что сначала нужно создать файл на диске сервера, а второй хранит данные из Blob в байтовой памяти, потребляющей память. В моем конкретном случае я собираюсь обрабатывать файлы размером ~ 150 МБ.
Учитывая обстоятельства (окружающая среда, размеры файлов...), которые подходят, как вы думаете, лучше?