【问题标题】:How to display uploaded files dynamically in MVC app如何在 MVC 应用程序中动态显示上传的文件
【发布时间】:2019-11-06 11:02:59
【问题描述】:

我有一个显示在页面上的文件列表:

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 显示在不同的视图中 - 有什么方法可以显示在同一个视图中?阅读有关使用 iframe 的内容,但不太清楚如何处理它们。

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: c# asp.net-core-3.0


    【解决方案1】:

    您可以向您的操作发送查询字符串,以根据输入选择文件。像这样的

    [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");     
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2020-02-01
      • 1970-01-01
      相关资源
      最近更新 更多