【问题标题】:mvc 3 Open uploaded file in new windowmvc 3 在新窗口中打开上传的文件
【发布时间】:2013-05-31 11:18:52
【问题描述】:

谁能帮帮我,我就是不知道出了什么问题。

场景:员工可以上传文件(doc、docx 或 pdf)。这些文件显示在表格中。当他们单击名称时,文件应在新窗口中打开。

现在我可以上传文件了。此文件保存在上传文件夹和数据库中。上传的文件显示在表格中,但是当我单击文件名时,文件会被下载,而不是在新窗口中打开。我尝试了几件事,但总是得到相同的结果。

接下来我将包含控制器和视图。

控制器:

//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“有效”。当我单击它时,pdf 在新窗口中打开,但 docx 文件已下载。当我自己在新窗口中输入网址时,我得到了相同的结果(打开了 pdf,下载了 docx)。当我点击第二个 href 时,两个文件都被下载了。

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

【问题讨论】:

  • 感谢大家的cmets!在这种情况下,我会选择只接受 pdf,并让他们选择查看或下载文件

标签: asp.net-mvc-3 file-upload


【解决方案1】:

这是浏览器的预期行为。

  • 在您的第一个 href 中,您在 _blank 窗口中打开。所有浏览器本身都支持 pdf 内容类型,因此 pdf 在窗口本身中打开。
  • 第二个href你写到响应输出。基本上你是在告诉浏览器为我下载东西。

如果您想在窗口本身中显示文件,请在响应中添加内容处置标头。有关更多信息,请参阅此答案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());

【讨论】:

    【解决方案2】:

    我认为打开 pdf 文件是因为大多数新浏览器都有一个插件。 adobe reader'来读取或渲染PDF文件但是docx文件不能像pdf一样直接打开,你必须找到一个工具来渲染你的docx文件。

    【讨论】:

      【解决方案3】:

      PDFS 在浏览器中打开第一个 href 的原因,是因为大多数浏览器都内置了 PDF 查看器,而对于办公文档,您必须安装外部插件才能在浏览器中查看。

      请参阅:http://bit.ly/ZiwpCw(适用于 Chrome)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-24
        • 1970-01-01
        • 2011-12-09
        • 1970-01-01
        • 1970-01-01
        • 2018-03-03
        相关资源
        最近更新 更多