HTTP error 404.0 - не найден при попытке загрузки файла
У меня есть страница razor, на которой перечислены файлы, доступные в каталоге сервера. Я намерен загрузить файл, когда нажму на соответствующий Скачать Actionlink панели. Я получаю ошибку
HTTP Error 404.0 - Not Found The resource you are looking for has been removed, had its name changed, or is temporarily unavailable..
Дополнительные сведения о трассировке включают в себя :
Module IIS Web Core Notification MapRequestHandler Handler StaticFile Error Code 0x80070002
Requested URL http://localhost:8071/FileProcess/Download/C:/Users/tshumae/source/repos/MySolution/MyProject/Downloads/log4net-cheat-sheet.pdf Physical Path C:\Users\tshumae\source\repos\MySolution\MyProject\FileProcess\Downloads\C:\Users\tshumae\source\repos\PureFlexGateway\MIHR_SYSTEM\Downloads\log4net-cheat-sheet.pdf
Вот как я загружаю файлы :
DownloadFiles.в CS
<pre> public List<DownLoadFileInformation> GetBatches() { List<DownLoadFileInformation> lstFiles = new List<DownLoadFileInformation>(); string realPath = @"C:\Users\tshumae\source\repos\MySolution\MyProject\Downloads"; IEnumerable<string> fileList = Directory.EnumerateFiles(realPath); if (System.IO.Directory.Exists(realPath)) { int i = 0; foreach (string file in fileList) { FileInfo f = new FileInfo(file); string separator = "\\"; var sep = separator.ToString(); StringBuilder sb = new StringBuilder(realPath); var filepath = sb.Append(sep); lstFiles.Add(new DownLoadFileInformation() { FileId = i + 1, FileName = Path.GetFileName(file), FileSize = f.Length, FilePath = filepath + Path.GetFileName(file), }); i = i + 1; } } return lstFiles.ToList(); }
FileProcessController.в CS
Это представление возвращает список файлов :
public ActionResult Index() { var filesCollection = obj.GetBatches(); return View(filesCollection); }
И этот метод загружает файл :
public FileResult Download(string URL) { //int CurrentFileID = Convert.ToInt32(FileID); string CurrentFileUrl = Convert.ToString(URL); var filesCol = obj.GetBatches(); string CurrentFileUrll = (from fls in filesCol where fls.FilePath == CurrentFileUrl select fls.FilePath).FirstOrDefault(); byte[] fileBytes = System.IO.File.ReadAllBytes(CurrentFileUrll); string CurrentFileName = (from fls in filesCol where fls.FilePath == CurrentFileUrl select fls.FileName).FirstOrDefault(); string contentType = string.Empty; if (CurrentFileName.Contains(".pdf")) { contentType = "application/pdf"; } else if (CurrentFileName.Contains(".docx")) { contentType = "application/docx"; } return File(fileBytes, contentType,CurrentFileName); }
Что я уже пробовал:
Я искал вокруг и предложения указывают на то, что я должен передать имя файла и расширение отдельно на мой взгляд здесь :
<pre> <td> @Html.ActionLink("Download", "Download", new { id = item.FilePath }) </td>
но я не совсем уверен, как добиться того же самого, и я действительно думаю, что это большая работа? Есть ли лучший способ загрузить файл в моем контексте или альтернативно, как я могу передать имя файла и расширение отдельно?