Asp.net mvc 3 mvc 3在新窗口中打开上载的文件

Asp.net mvc 3 mvc 3在新窗口中打开上载的文件,asp.net-mvc-3,file-upload,Asp.net Mvc 3,File Upload,谁能帮帮我吗,我就是不知道怎么了 场景:员工可以上传文件(doc、docx或pdf)。这些文件显示在表格中。当他们单击名称时,文件应在新窗口中打开 现在我可以上传一个文件了。此文件保存在uploads文件夹和数据库中。上载的文件显示在一个表中,但当我单击文件名时,文件将被下载,而不是在新窗口中打开。我试过几种方法,但总是得到同样的结果 接下来我将包括控制器和视图 控制器: //To view the files in a table. public ActionResult ShowUpload

谁能帮帮我吗,我就是不知道怎么了

场景:员工可以上传文件(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文件)
{
@DisplayFor(f=>file.FileDate)
@DisplayFor(f=>file.Employee.FullName)
@DisplayFor(f=>file.FileName)
@(file.FileSize/1000)kb
}
第一个href“工作”。当我点击它的pdf打开了一个新的窗口,但docx文件被下载。当我自己在一个新窗口中输入url时,我得到了相同的结果(pdf打开,docx下载)。当我点击第二个href时,两个文件都被下载了


是有什么问题还是因为我用Chrome做的?(我刚刚在explorer 9中检查了它,得到了相同的结果)

这是浏览器的预期行为

  • 在第一个href中,您将在空白窗口中打开。所有浏览器本机都支持pdf内容类型,因此在窗口中打开pdf
  • 对于第二个href,您可以编写响应输出。基本上你是在告诉浏览器帮我下载东西
如果要在窗口中显示文件本身,请在响应中添加内容处置标题。有关更多信息,请参阅此答案


我认为pdf文件打开是因为大多数新浏览器都有一个blugin“ex.adobe reader”来读取或呈现pdf文件,但docx文件不能像pdf一样直接打开,你必须找到一个工具来呈现你的docx文件。

在你的第一个href中,pdf之所以在浏览器中打开,是因为大多数浏览器都有一个内置的pdf查看器,对于office文档,您必须安装外部插件才能在浏览器中查看

参见:(铬)


在第二个href中,您链接到一个直接返回文件的操作,因此浏览器将其视为下载,而不是您试图在另一个窗口中查看它。

感谢大家的评论!在这种情况下,我将选择只接受pdf,并给他们查看或下载文件的选项
@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>
}
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());