Tshumore Ответов: 1

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>


но я не совсем уверен, как добиться того же самого, и я действительно думаю, что это большая работа? Есть ли лучший способ загрузить файл в моем контексте или альтернативно, как я могу передать имя файла и расширение отдельно?

1 Ответов

Рейтинг:
1

OriginalGriff

Посмотри на свой путь:

C:\Users\tshumae\source\repos\MySolution\MyProject\FileProcess\Downloads\C:\Users\tshumae\source\repos\PureFlexGateway\MIHR_SYSTEM\Downloads\log4net-cheat-sheet.pdf

':' не является допустимым символом в имени папки или файла, поэтому он может появиться только один раз после спецификации буквы диска. Вы, по-видимому, сжимаете два полных пути вместе и надеетесь, что это сработает.

Я бы начал с того, чтобы выяснить, откуда берется "второй путь", а затем найти фактический физический файл, на который он ссылается. Затем выясните, каким должен быть "комбинированный путь" на самом деле.