1

当用户单击操作链接时,如何打开服务器上的现有文件?以下代码适用于下载文件,但我想打开一个新的浏览器窗口或选项卡,并显示文件内容。

public ActionResult Download()
{
    return File(@"~\Files\output.txt", "application/text", "blahblahblah.txt");
}
4

5 回答 5

2

您必须为新选项卡添加“内联”。

byte[] fileBytes = System.IO.File.ReadAllBytes(contentDetailInfo.ContentFilePath);
Response.AppendHeader("Content-Disposition", "inline; filename=" + contentDetailInfo.ContentFileName);
return File(fileBytes, contentDetailInfo.ContentFileMimeType);
于 2014-04-14T10:22:08.160 回答
1

您使用该File()方法的方式是在第三个参数中指定文件名,这会导致将content-disposition标头发送到客户端。这个标头告诉 Web 浏览器响应是一个要保存的文件(并建议一个名称来保存它)。浏览器可以覆盖此行为,但这不是服务器可以控制的。

您可以尝试的一件事是不指定文件名:

return File(@"~\Files\output.txt", "application/text");

响应仍然是一个文件,最终仍然取决于浏览器如何处理它。(同样,服务器无法控制。)从技术上讲,HTTP 中没有“文件”之类的东西,它只是响应中的标头和内容。通过省略建议的文件名,在这种情况下,框架可能会省略content-disposition标题,这是您想要的结果。值得在浏览器中测试结果,看看是否确实省略了标题。

于 2013-05-24T19:28:28.693 回答
0

请尝试此操作并在 html 操作链接中替换您的控制器名称和操作名称

public ActionResult ShowFileInNewTab()
{
     using (var client = new WebClient()) //this is to open new webclient with specifice file
    {
        var buffer = client.DownloadData("~\Files\output.txt");
        return File(buffer, "application/text");
    }     
}

或者

public ActionResult ShowFileInNewTab()
    {       
            var buffer = "~\Files\output.txt"; //bytes form this
            return File(buffer, "application/text");          
    }

这是显示在新空白选项卡中的操作链接

<%=Html.ActionLink("Open File in New Tab", "ShowFileInNewTab","ControllerName", new { target = "_blank" })%>
于 2013-05-24T20:01:33.323 回答
0

在链接上使用空白目标在新窗口或选项卡中打开它:

<a href="/ControllerName/Download" target="_blank">Download File</a>

但是,强制浏览器显示内容是您无法控制的,因为这完全取决于用户如何配置他们的浏览器来处理application/text.

如果您正在处理文本,您可以创建一个视图并在该视图上填充文本,然后将其作为常规 HTML 页面返回给用户。

于 2013-05-24T19:28:17.647 回答
0

我不能投票您的回答是否有用,请遵循。非常感谢 !

public FileResult Downloads(string file)      
{
            string diretorio = Server.MapPath("~/Docs");

            var ext = ".pdf";
            file = file + extensao;
            var arquivo = Path.Combine(diretorio, file);
            var contentType = "application/pdf";

            using (var client = new WebClient()) 
            {
                var buffer = client.DownloadData(arquivo);
                return File(buffer, contentType);
            }
        }     
于 2015-06-19T14:17:49.300 回答