首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在浏览器中显示外部文件夹中的PDF文档

如何在浏览器中显示外部文件夹中的PDF文档
EN

Stack Overflow用户
提问于 2012-09-11 01:17:22
回答 2查看 2.9K关注 0票数 0

目前我正在使用的文档管理系统项目技术是ASP.Net MVC3。我想要显示位于我的硬盘驱动器(C:,D: E: ect)文件夹中的pdf文档。我试着用<embed>标记。但它并没有起作用。它适用于我的项目中的文件。此外,我也不需要下载pdf和阅读。我需要把它展示在我的视野中的某个地方。

我看到了这段代码。但是我不知道怎么用这个..

代码语言:javascript
复制
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);
}

有人能帮我解决这个问题吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-09-11 01:21:41

您可以使用控制器类的File方法。这会将PDF返回到浏览器。

代码语言:javascript
复制
public ActionResult GetFile(string fileName)
{
  string fullPathToFile=SomeMethodToGetFullPathFromFileName(fileName);
  return File(fullPathToFile,"application/pdf","someFriendlyName.pdf")
}

假设SomeMethodToGetFullPathFromFileName是一个返回PDF文件完整路径的方法。

您可以使用Server.MapPath方法来获取文件的完整(物理)路径。

如果您想在浏览器中查看,可以像这样访问它

代码语言:javascript
复制
yoursitename/someControllername/getfile?fileName=somepdffilenamehere
票数 0
EN

Stack Overflow用户

发布于 2012-09-11 01:26:20

您所显示的代码表示一个控制器操作,该操作服务于App_Code文件夹中的文件。在硬盘上提供来自任意位置的文件将是一个巨大的安全漏洞。因此,我建议您坚持使用这种方法。但这段代码中仍然存在缺陷。恶意用户仍然可以使用巧尽心思构建的url在您的硬盘上显示任意文件。可以通过以下操作修复此问题:

代码语言:javascript
复制
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标记链接到此控制器操作:

代码语言:javascript
复制
<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

代码语言:javascript
复制
<iframe src="@Url.Action("GetFile", "SomeController", new { file = "foo.pdf" })" style="width:718px; height:700px;" frameborder="0"></iframe>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12356499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档