【问题标题】:How can show document file in iframe when i get the file name from database?当我从数据库中获取文件名时,如何在 iframe 中显示文档文件?
【发布时间】:2025-12-24 19:15:06
【问题描述】:

当我从数据库中获取文件名时,如何在 iframe 中显示文档文件?我的数据库表名是 File,我的 viewmodel 是 MyFileModel。

    public ActionResult Create(HttpPostedFileBase file)
       {         
        try
        {
            if (ModelState.IsValid)
            {
                db.Files.Add(new File()
                {
                    FileName = Path.GetFileName(file.FileName)
                });
                db.SaveChanges();
            }
        }
        catch (Exception)
        {
            var error = "Sorry not save";
        }
        return Content("");
    }

     public FileStreamResult GetPDF()
        {
            var file = db.Files.Single(s => s.Id == 1);
            FileStream fs = new FileStream(Server.MapPath(file.FileName), FileMode.Open, FileAccess.Read);
            return File(fs, "application/pdf");
            //return View(Server.MapPath("~/File/SegmentAdd.txt"));
            //return File(fs,"text/plain");
        }

   <div id="frame">
    <iframe src="@Url.Action("GetPDF","Home")" width="900px" height="500px"></iframe>
  </div>
`

【问题讨论】:

  • 我可以知道您在 FileName 字段中保存的内容只是上传文件的名称或完整路径。如果你只保存上述情况下的文件名,我猜你会收到一个错误。
  • 我已经保存了文件名。实际上我想用文件名保存文档文件。
  • 您是否在文件系统中保存任何物理文件?

标签: javascript model-view-controller


【解决方案1】:

我发布的答案都是假设,我对您的解决方案没有清晰的了解。 如果您不保存物理文件,请尝试将其保存在文件夹中,然后将名称保存在数据库中,或者尝试将整个路径保存在数据库中。

方法一

如果您将文件保存在文件夹中,请说 文件 最好的方法是在 web.config(根目录下的.config 文件)中添加一个密钥如下

<add key="FilePath" value= "~/File/"/>

然后修改你的C#代码如下

public FileStreamResult GetPDF()
        {
            var file = db.Files.Single(s => s.Id == 1);
            string fileName = file.FileName;
            string filePath = ConfigurationManager.AppSettings["FilePath"] + fileName;
            FileStream fs = new FileStream(Server.MapPath(filePath), FileMode.Open, FileAccess.Read);
            return File(fs,"text/plain"); // "text/plain" if your file content-type is text file
            //return View(Server.MapPath("~/File/SegmentAdd.txt"));
            //return File(fs,"text/plain");
        }

方法二

如果您要保存整个路径,那么它会使编码更加简单,并且您无需更改已编写的代码,只需继续进行。

希望这会对你有所帮助。

【讨论】:

  • 嗨 Jayaraj,对不起,我没有提到我想要什么。我想将物理文件保存到数据库中,然后我想通过单个查询从数据库中显示文件。谢谢。
  • 物理文件入库是什么意思?我没能得到你。你的意思是字节吗?
  • 有没有办法将物理文件保存到数据库中?字节或其他方法我不知道如何?
  • 在此之前让我问你为什么更喜欢将物理文件保存到数据库中。如果将文件保存到数据库中,将占用大量内存。如果这是一个问题,最好按照我帖子中的方法1。
  • 我了解 Jayaraj,我会明智地使用方法 1,谢谢。
【解决方案2】:

我认为 pdf 的打开方式取决于用户使用的浏览器。

您可能需要类似:https://pdfobject.com/

祝你好运!

【讨论】: