У меня не идеальная ситуация, когда загруженные файлы хранятся во внутренней сетевой папке. Таким образом, в базе данных я сохраняю путь к тому месту, где был сохранен файл, но вполне возможно, что файл будет удален из синхронизации базы данных. Таким образом, в действии Контроллера я ищу информацию о загрузке и проверяю, что все правильно. Это можно подытожить примерно так:
public ActionResult GetUploadedFile(int uploadId){
var uploadedFile = Repository<Upload>.FirstOrDefault(upload => upload.ID == uploadID);
if(uploadedFile == default(Upload)){
return View("InvalidUpload");
}
if(File.Exists(uploadFile.Path)){
var fileInfo = new FileInfo(uploadFile.Path);
var contentType = HttpContext.GetMimeTypeForFileInfo(fileInfo) // my lookup extension method
return File(uploadFile.Path, contentType, uploadFile.Name);
}
return View("InvalidUpload");
}
Проблема в том, что это действие в настоящее время доступно по ссылке в представлении, загруженном через AJAX. Поэтому, когда файл существует и все в порядке, в браузере откроется стандартное диалоговое окно «Что вы хотите сделать с этим файлом», и контент останется видимым для пользователя. Проблема заключается в других путях через код. Возврат представления приводит пользователя к совершенно новому URL. А затем, нажав назад, вы вернетесь туда, где они были (это в основном динамические вкладки jQuery, так что ничего особенного, но все же это большое неудобство).
Так что я ищу, как другие могли справиться с этой ситуацией, поскольку это не кажется необычным. Или даже некоторые отзывы, чтобы сделать это немного более удобным для пользователя. Я не могу сказать, где хранится файл, поэтому изменить его нельзя.