ASP.Net MVC:在浏览器中显示文件,在浏览器标签中显示文件名
在我的应用程序中,我有一个文件夹结构,您可以上传各种文件(jpg,png,pdf,txt等)。您可以直接下载它们作为文件或者您可以在浏览器中查看该文件。ASP.Net MVC:在浏览器中显示文件,在浏览器标签中显示文件名
要显示在浏览器中的文件,我用的是如下因素控制器动作:
public virtual ActionResult FileDisplay(int fileId, bool isFile)
{
var viewmodel = _presenter.GetDocumentDisplayViewModel(fileId, isFile);
return base.File(viewmodel.Data, viewmodel.MediaType);
}
该文件显示在浏览器这样的: https://i.stack.imgur.com/TXmTy.jpg
浏览器选项卡显示我的控制器的名字“ FileDisplay“和(对于这个例子)图像的尺寸。
问题: 如何在浏览器标签标题中显示文件名而不是控制器名称?这适用于所有文件类型。
1.内容Dispostion头
我发现几个职位,他们说的内容处理标头添加到与文件名的响应:
- Returning a file to View/Download in ASP.NET MVC
- Make a file open in browser instead of downloading it
但这不起作用。
2.添加文件名,文件构造
return base.File(viewmodel.Data, viewmodel.MediaType, viewmodel.FileName);
如果我这样做,该文件是在浏览器中显示代替下载。
3 PDF文件标题
我发现,有时候浏览器分页标题是正确的!如果我在具有文件标题(标题为pdf属性,而不是文件名)的浏览器中显示PDF文件,则浏览器标题是正确的: https://i.stack.imgur.com/orAZS.jpg
有人可以帮助我吗?
解决方法现在:
我创建了一个新的动作和视图,一个全屏iframe,所以我可以设置这个容器视图的标题。 IFrame源直接调用我的文件。
public virtual ActionResult FileDisplay(string fileName, int fileId, bool isFile)
{
var viewModel = new IFrameDocumentDisplayViewModel
{
FileName = fileName,
FileId = fileId,
IsFile = isFile
};
return PartialView("IFrameFileDisplayView", viewModel);
}
public virtual ActionResult GetFile(int fileId, bool isFile)
{
var viewmodel = _presenter.GetDocumentDisplayViewModel(fileId, isFile);
return base.File(viewmodel.Data, viewmodel.MediaType);
}
@model OnView.Models.ViewModels.Document.IFrameDocumentDisplayViewModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>@Model.FileName</title>
</head>
<body>
<iframe style="border: 0; position:absolute; top:0; left:0; right:0; bottom:0; width:100%; height:100%" src="@Html.Raw(Url.Action("GetFile", "Document", new { fileId = Model.FileId, isFile = Model.IsFile}))"></iframe>
</body>
</html>
所以现在我可以设置页面标题。但我仍然很好奇,如何在没有IFrame的情况下完成它。
很遗憾,这是我发现这样做的唯一方法。一般的经验法则,“如果解决方案涉及IFrame,可能不是正确的解决方案。” –
设置在头节你的标题标签到您的文件名
<tatle>Filename</title>
您有更多扩展代码示例?你能修改我的控制器动作吗? –
试试这个: -
public virtual ActionResult FileDisplay(int fileId, bool isFile)
{
var viewmodel = _presenter.GetDocumentDisplayViewModel(fileId, isFile);
ViewBag.Title= viewmodel.FileName;
return base.File(viewmodel.Data, viewmodel.MediaType);
}
这不工作 –
什么浏览器显示为标签标题是URL的最后一部分(该浏览器已不知道什么是你的控制器的名称),所以你可以重新格式化您的网址是这样的:
localhost/OnView.Web/Document/FileDisplay/1685/True/MyTabName
然后标签标题将为MyTabName。
但改变这种目的的整个URL模式也似乎是一个解决办法...
旁注:我有同样的问题,但我的网址是这样的:FileDisplay/3?isFile=true
,我的分页标题是(在Chrome中,对于IE,标题标题是域)。
尝试更改.cshtml页面中的“ViewBag.Title”。 – Nitin
直接返回文件时没有.cshtml页面。 –
糟糕你是对的,我没有看到它。你可以在你的控制器“ViewBag.Title”中试试这个。它可能工作。 – Nitin