有人可以帮助我,我只是无法弄清楚是什么错误。
场景:员工可以上传文件(doc,docx或pdf)。这些文件显示在表格中。当他们点击名称时,文件应该在新窗口中打开。
现在我可以上传文件了。该文件保存在uploads文件夹和数据库中。上传的文件显示在表格中,但是当我单击文件名称时,文件将被下载而不是在新窗口中打开。我尝试过几件事,但总能得到相同的结果。
我接下来会包含控制器和视图。
控制器:
//To view the files in a table.
public ActionResult ShowUploadedFiles()
{
return View(db.UploadedFiles.ToList());
}
//To open a file
public ActionResult OpenFile(string fileName)
{
var fs = System.IO.File.OpenRead(Server.MapPath("~/Uploads/" + fileName));
return File(fs, "application/pdf", fileName);
}
查看
@foreach (var file in Model)
{
<tr>
<td>@Html.DisplayFor(f => file.FileDate)</td>
<td>@Html.DisplayFor(f => file.Employee.FullName)</td>
<td><a href="/Uploads/@file.FileName" target="_blank">@file.FileName</a></td>
<td>@Html.DisplayFor(f => file.FileName)</td>
<td>@(file.FileSize/1000)kb</td>
<td><a href="@Url.Action("OpenFile", new { fileName=file.FileName})" target=_blank>@file.FileName</a></td>
</tr>
}
第一个href&#34;工作&#34;。当我点击它时,pdf在新窗口中打开,但docx文件已下载。当我在一个新窗口中自己输入网址时,我得到了相同的结果(pdf已打开,docx已下载)。当我点击第二个href时,两个文件都被下载了。
是否有问题或是因为我在Chrome中执行此操作? (我刚刚在资源管理器9中检查了它,我得到了相同的结果)
答案 0 :(得分:0)
它是浏览器的预期行为。
如果要在窗口中显示文件,请在响应中添加内容处置标题。有关详细信息,请参阅此答案Returning_file_in_Asp.net mvc3
var cd = new System.Net.Mime.ContentDisposition
{
FileName = yourfilename,
// always prompt the user for downloading, set to true if you want
// the browser to try to show the file inline
Inline = true,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
答案 1 :(得分:0)
我认为pdf文件打开是因为大多数新浏览器都有一个蓝色的'ex。 adobe reader'用于阅读或呈现PDF文件,但docx文件无法像pdf一样直接打开,您必须找到一个工具来呈现您的docx文件。
答案 2 :(得分:0)
PDFS在您的第一个href中在浏览器中打开的原因是因为大多数浏览器都有内置的PDF查看器,而对于office文档,您必须安装外部插件才能在浏览器中查看。
请参阅:http://bit.ly/ZiwpCw(适用于Chrome)
在第二个href中,您链接到直接返回文件的操作,因此浏览器将其视为下载而不是您尝试在另一个窗口中查看它。