Как динамически отображать загруженные файлы в приложении MVC - PullRequest
1 голос
/ 06 ноября 2019

У меня есть список файлов, отображаемых на странице:

PDF1, PDF2, PDF3, ...

 @model IEnumerable<System.IO.FileInfo>
 @foreach (var file in Model)
 {
     <li class="list-group-item">
         <u>
             <a asp-controller="File" asp-action="DisplayFile">@file.Name</a>
         </u>
     </li>
 }

Как вы видите, я использую класс FileInfo здесь в качестве модели.

Чего я хотел бы добиться, так это файла, отображаемого в браузере, когда я нажимаю на его имя:

PDF1 щелчок -> показывает PDF1

[HttpGet]
public IActionResult DisplayFile()
{
    return new PhysicalFileResult(@"C:\MyProject\UploadedFiles\PDF1.pdf", "application/pdf");
}

Двапроблемы, с которыми я сталкиваюсь:

  1. Очевидно, что легко дать ссылку на файл, но я хочу, чтобы она была динамической:

    return new PhysicalFileResult(dynamically_chosen_file, "application/pdf");
    

    Итак, нажав на PDF2 -> показывает PDF2, PDF3 -> PDF3 и т. д.

    Я попытался перебрать папку и поместить все файлы в список, но все еще не уверен, каким должен быть следующий шаг.

  2. PDF отображается в другом виде - любой способ сделать отображается в том же виде? Прочтите кое-что об использовании iframes, но не знаете, как с ними обращаться.

Буду признателен за любую помощь, спасибо.

1 Ответ

0 голосов
/ 09 ноября 2019

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

[HttpGet]
public IActionResult DisplayFile(string filename)
{
    return new PhysicalFileResult(@"C:\MyProject\UploadedFiles\"+filename, "application/pdf");
}

Ваш html-файл должен измениться так, чтобы отправлять строку запроса вашему действию:

 @model IEnumerable<System.IO.FileInfo>
 @foreach (var file in Model)
 {
     <li class="list-group-item">
         <u>
             <a asp-controller="File" asp-action="DisplayFile?filename=@file.Name">@file.Name</a>
         </u>
     </li>
 }

Для динамического просмотра попробуйте вернуть FileStream вместо PhysicalFileResultкак это:

public IActionResult DisplayFile(string filename)
{
    var stream = new FileStream(@"C:\MyProject\UploadedFiles\"+filename, FileMode.Open);
    return new FileStreamResult(stream, "application/pdf");     
}
...