Итак, я работаю над проектом .NET MVC, который работает на небольшом веб-сервере с ограниченными ресурсами.Однако у сайта есть довольно большие файлы, которые он обслуживает пользователям.А из-за ограниченного объема доступной оперативной памяти на сервере стандартный FileResult
возвращаемый тип действия привел к OutOfMemoryException
.
. Поэтому мне пришлось обойти эту проблему, поскольку обновление сервера былоне вариант.Я пришел со следующим решением:
public partial class DownloadController : Controller
{
// GET: Download
public virtual ActionResult Index(string path)
{
try
{
fullPath = Server.MapPath($"~/downloadable_files/{path}");
var fileName = fullPath.Substring(fullPath.LastIndexOf('\\') + 1);
Response.Clear();
Response.ContentType = System.Net.Mime.MediaTypeNames.Application.Octet;
Response.AppendHeader("Content-Disposition", new System.Net.Mime.ContentDisposition("attachment") { FileName = fileName }.ToString());
Response.TransmitFile(fullPath);
Response.End();
return Redirect(Request.UrlReferrer.AbsoluteUri);
}
catch (Exception e)
{
return HttpNotFound();
}
}
}
Это прекрасно работает.Однако, пока пользователь загружает файл, он не может продолжать просматривать веб-сайт в том же браузере.Это как действие блокирует соединение с сервером во время загрузки файла.Я не сталкивался с этим раньше, и мне интересно, может ли это иметь какое-либо отношение к тому, как я подаю файл?Мне кажется, что я упустил некоторые базовые знания здесь.
Любые предложения будут с благодарностью.