Playframework Play framework上公用文件夹外的资产映射
我们有大量需要存储在外部路径中的图像。。i、 e在播放应用程序文件夹之外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
我们如何才能使其作为一种资产进行播放,从而将其作为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中委托授权。见: