【问题标题】:Play Framework Java - Display htm file stored on local serverPlay Framework Java - 显示存储在本地服务器上的 htm 文件
【发布时间】:2015-06-03 13:57:23
【问题描述】:

你好 Stackoverflow 社区!

我正在使用 Java 处理 Play Framework 2.1.1。

理想情况下,当用户单击顶部菜单中的链接(由导航栏定义)时,他会被重定向到存储在内部服务器中的文件。文件路径的类型为“file:///R:/PUBLIC/Name/myfile.htm”,文件中包含一张图片。

不幸的是,这不起作用(当我单击空白页时打开,标题为“未知”),我真的不知道为什么......我没有错误,只是空白页。

这是顶部菜单中的链接:

        <li><a href="@routes.Application.guideline()" target="_blank">@Messages.get("general.guidelines")</a></li>  

那么这里是控制器应用程序中的guideline()函数:

public static Result guideline() {

    Guideline guidelineLink = Guideline.find.select("*").where().eq("id", 1).findUnique();
    if(guidelineLink.link == null){
        return ok(views.html.display.createError.render());
    }else{      
        return redirect(guidelineLink.link);
    }
}

我在数据库中检索文件的路径,这是可行的,我一直在使用标准的“http://....”url 对其进行测试。检索到的链接就是上面提到的路径。

当然,我尝试通过在浏览器中复制/粘贴来简单地打开文件,并且它可以工作。我还尝试将扩展名更改为 .html,或删除开头的“file:///”,但没有成功。我在互联网上也一无所获,我的好朋友 Google 在这方面让我失望了!

谢谢大家的帮助:-)

【问题讨论】:

    标签: java playframework playframework-2.1


    【解决方案1】:

    出于安全原因,您会得到一个空白页面。在RFC1738 你读到:

    文件 URL 方案用于指定可在 特定的主机。该方案与大多数其他 URL 方案不同, 不指定可通过 互联网。 (...)

    文件 URL 方案的不寻常之处在于它没有指定 Internet 此类文件的协议或访问方法;因此,它的效用在 主机之间的网络协议是有限的。

    浏览器能够打开本地计算机上的任何文件的图像。它将开辟新的利用方式,因为没有什么可以阻止远程页面访问您的本地数据。当然,您的浏览器可以打开本地文件,但这只是基本应用程序的一个附加功能,只有在您手动初始化打开操作时才有效。

    要实现你想要的,你可以:

    • 把文件放到你的项目公共资源中
    • 在服务器端加载文件的内容(注意必须被授予对该资源的访问权限),然后通过自定义响应返回它

    【讨论】:

    • 感谢您的回答!我不明白的是,在这个位置,网络中的任何用户都可以访问该文件,那么为什么浏览器不可以呢?我的意思是我不是创建文件并把它放在那里的人,但是我可以从我的电脑上打开它,有什么区别?对不起,如果这应该是显而易见的:-(
    • 一开始我误解了你的问题。你的评论很清楚,所以我更新了我的帖子。
    • 谢谢你的帮助,现在清楚多了:-)
    猜你喜欢
    • 2012-07-24
    • 2012-06-24
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多