Playframework Play framework上公用文件夹外的资产映射

Playframework Play framework上公用文件夹外的资产映射,playframework,playframework-2.2,Playframework,Playframework 2.2,我们有大量需要存储在外部路径中的图像。。i、 e在播放应用程序文件夹之外 我们如何才能使其作为一种资产进行播放,从而将其作为web服务器进行流式处理?您可能已经看到了播放的功能。此外,您还可以定义自己的游戏标准资产 在conf/routes中,您需要为外部资产添加一行: # Static resources (not managed by the Play framework) GET /my_external_assets/*file controllers.ExtAs

我们有大量需要存储在外部路径中的图像。。i、 e在播放应用程序文件夹之外


我们如何才能使其作为一种资产进行播放,从而将其作为web服务器进行流式处理?

您可能已经看到了播放的功能。此外,您还可以定义自己的游戏标准资产

conf/routes
中,您需要为外部资产添加一行:

# Static resources (not managed by the Play framework)
GET     /my_external_assets/*file         controllers.ExtAssets.at(file)
# Play's standard assets
GET     /assets/*file                     controllers.Assets.at(path = "/public", file)
然后,您必须定义资产控制器。下面是一个简单的示例:

public class ExtAssets extends Controller {

    public Result at(String filePath) {
        File file = new File(filePath);
        return ok(file, true);
    }
}

为了完整性起见,我已经经历了很多次这个问题,但没有足够的答案

通常,nginx将面对外部世界和外部环境。您不希望直接从游戏中提供文件,尤其是如果您自己正在构建可能存在安全风险的路径。让专家处理静态文件,即nginx

sbt native packager就在分发ZIP包的内部[1]。以下是相关文件:

dist    → Arbitrary files to be included in your projects distribution
对于诸如use where之类的用例,您可以通过响应头告诉nginx要发送回客户端的文件



TLDR:使用nginx实现它的目的,使用Play实现它的目的。

一个黑客解决方案是在sbt Play公用文件夹中包含一个指向要加载文件位置的符号链接。符号链接将打包在程序集中,并在运行时起作用

cd ~/your/playframework/awesome/project/public
ln -s '/var/lib/funky-data-set-for-my-awesome-project/' funky-data
现在,您可以在路由文件中使用以下内容:

GET         /funky/assets/*file                controllers.Assets.at(path="/public/funky-data", file)
这样做的缺点是,您的stage/dev/prod环境必须在同一位置具有所需的内容。

Play 2.5

文件:路由

GET  /external_resources/*file controllers.ImagesController.getImage(path="/home/project_name/external/images", file: String)
文件:ImagesController

package controllers;

import play.mvc.Controller;
import play.mvc.Result;

import java.io.File;

/**
 * Created by js on 6/1/17.
 */
public class ImagesController extends Controller {

public Result getImage(String path, String image) {
    System.out.println(path);
    System.out.println(image);
    image = image.replace("%20", " ");
    File file = new File(path + image);

    return ok(file);
  }
}

您不需要以>括号开始提问。这导致您的整个问题的格式类似于摘录/块。很抱歉,这是我的第一个问题,将继续更正。谢谢你的更新这安全吗?比如说,当filePath设置为“./conf/application.conf”时,它将返回“../conf/application.conf”的内容,这可能不是您想要的内容。我只是举了一个简单的例子。如果您想要附加限制,您必须自己添加这些限制。:)nginx没有授权提供文件。除非您只是将所有文件公开?如果需要,您可以在nginx中委托授权。见: