目前我正在使用的文档管理系统项目技术是ASP.Net MVC3。我想要显示位于我的硬盘驱动器(C:,D: E: ect)文件夹中的pdf文档。我试着用<embed>标记。但它并没有起作用。它适用于我的项目中的文件。此外,我也不需要下载pdf和阅读。我需要把它展示在我的视野中的某个地方。
我看到了这段代码。但是我不知道怎么用这个..
public FileResult GetFile(string fileName)
{
Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName + ";");
string path = AppDomain.CurrentDomain.BaseDirectory + "App_Data/";
return File(path + fileName, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName);
}有人能帮我解决这个问题吗?谢谢
发布于 2012-09-11 01:21:41
您可以使用控制器类的File方法。这会将PDF返回到浏览器。
public ActionResult GetFile(string fileName)
{
string fullPathToFile=SomeMethodToGetFullPathFromFileName(fileName);
return File(fullPathToFile,"application/pdf","someFriendlyName.pdf")
}假设SomeMethodToGetFullPathFromFileName是一个返回PDF文件完整路径的方法。
您可以使用Server.MapPath方法来获取文件的完整(物理)路径。
如果您想在浏览器中查看,可以像这样访问它
yoursitename/someControllername/getfile?fileName=somepdffilenamehere发布于 2012-09-11 01:26:20
您所显示的代码表示一个控制器操作,该操作服务于App_Code文件夹中的文件。在硬盘上提供来自任意位置的文件将是一个巨大的安全漏洞。因此,我建议您坚持使用这种方法。但这段代码中仍然存在缺陷。恶意用户仍然可以使用巧尽心思构建的url在您的硬盘上显示任意文件。可以通过以下操作修复此问题:
public ActionResult GetFile(string file)
{
var appData = Server.MapPath("~/App_Data");
var path = Path.Combine(appData, file);
path = Path.GetFullPath(path);
if (!path.StartsWith(appData))
{
// Ensure that we are serving file only inside the App_Data folder
// and block requests outside like "../web.config"
throw new HttpException(403, "Forbidden");
}
if (!System.IO.File.Exists(path))
{
return HttpNotFound();
}
return File(path, MediaTypeNames.Application.Pdf);
}现在,您可以使用embed标记链接到此控制器操作:
<object data="@Url.Action("GetFile", "SomeController", new { file = "test.pdf" })" type="application/pdf" width="300" height="200">
alt : @Html.ActionLink("test.pdf", "SomeController", "Home", new { file = "test.pdf" })
</object>如果您愿意,也可以选择iframe:
<iframe src="@Url.Action("GetFile", "SomeController", new { file = "foo.pdf" })" style="width:718px; height:700px;" frameborder="0"></iframe>https://stackoverflow.com/questions/12356499
复制相似问题