当我从数据库中获取文件名时,如何在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>
`
答案 0 :(得分:1)
我发布的答案都是假设的,我没有清晰的解决方案。 如果您没有保存物理文件,请尝试将其保存在文件夹中,然后将名称保存在数据库中或尝试将整个路径保存在数据库中。
方法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");
}
方法2 :
如果要保存整个路径,那么它会使编码变得更加简单,您无需更改已编写的代码,只需继续编写代码即可。
希望这会对你有所帮助。
答案 1 :(得分:0)
我认为pdf的打开方式取决于用户使用的浏览器。
您可能需要以下内容:https://pdfobject.com/。
祝你好运!