当用户点击动作链接时,如何在服务器上打开现有文件?以下代码适用于下载文件,但我想打开一个新的浏览器窗口或选项卡,并显示文件内容。
public ActionResult Download()
{
return File(@"~\Files\output.txt", "application/text", "blahblahblah.txt");
}
答案 0 :(得分:2)
您必须添加"内联"对于新标签。
byte[] fileBytes = System.IO.File.ReadAllBytes(contentDetailInfo.ContentFilePath);
Response.AppendHeader("Content-Disposition", "inline; filename=" + contentDetailInfo.ContentFileName);
return File(fileBytes, contentDetailInfo.ContentFileMimeType);
答案 1 :(得分:1)
您使用File()
方法的方法是在第三个参数中指定文件名,这会导致将content-disposition
标头发送到客户端。此标头告诉Web浏览器响应是要保存的文件(并建议保存它的名称)。浏览器可以覆盖此行为,但这不能从服务器控制。
您可以尝试的一件事是不指定文件名:
return File(@"~\Files\output.txt", "application/text");
响应仍然是一个文件,最终它仍然取决于浏览器如何处理它。 (同样,不能从服务器控制。)从技术上讲,HTTP中没有“文件”,它只是响应中的标题和内容。通过省略建议的文件名,在这种情况下,框架可以省略content-disposition
标头,这是您期望的结果。值得在浏览器中测试结果,看看是否实际省略了标题。
答案 2 :(得分:0)
在链接上使用空白目标在新窗口或标签中打开它:
<a href="/ControllerName/Download" target="_blank">Download File</a>
但是,强制浏览器显示内容是您无法控制的,因为它完全取决于用户如何配置浏览器来处理application/text
的文件。
如果您正在处理文本,您可以创建一个视图并在该视图上填充文本,然后将其作为常规HTML页面返回给用户。
答案 3 :(得分: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");
}
}
OR
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" })%>
答案 4 :(得分: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);
}
}