我使用playframework 2.x创建了一个移动html5网页。用户可以通过应用程序上传图像,然后应用程序存储在运行应用程序的服务器上。
图片存储在public/images
中,并以如下方式存储:@routes.Assets.at(images/images1.jpg)
我的问题是,每当用户将图像上传到我的服务器,然后尝试查看上传的图像时,就无法显示图像。
我发现每当我重新启动服务器上的播放过程时,新上传的图像都会正确显示。我通常像这样启动我的生产服务器:
activator dist
然后解压缩创建的zip目录并运行生成的脚本。
我认为问题在于,当应用程序打包时,它只会在assets.jar中打包当前可用的资产,因此无法显示在服务器启动后添加的新图像。
所以我的问题是,我需要更改哪些内容才能正确显示在服务器运行时更改或添加的图像,而无需重新打包并重新启动应用程序。
我的路线档案
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET / controllers.Application.index
# Used in Javascript to push new User into Database via Ajax
PUT /users/:i controllers.Userdata.addUser(i: Int)
... similiar PUT Requests ...
PUT /deactUser/:i controllers.Userdata.deactUser(i: Int)
GET /reloadUsers controllers.Userdata.reloadUsers(minA: Int, maxA: Int, gend: String, orient: String, verf: String)
GET /ads controllers.Application.getAds()
# Javascript Router
GET /assets/javascripts/routes controllers.Application.javascriptRoutes()
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.at(path="/public", file)
答案 0 :(得分:2)
创建dist包后,可以从创建的public
文件中访问*.jar
文件夹,因此您需要重新设置应用程序,以便在其中提供上传的文件。
相反,您应该在文件系统中创建一些目录并定义其路径(最好通过配置文件),这样您就可以上传文件并将其提供到独立的位置。当然,您也需要编写自定义操作来为它们提供服务,但这只是几行代码。
答案 1 :(得分:1)
以下是实践中要实施的内容:
在路线文件中,添加如下内容:
GET /customImage/:name controllers.Application.imageAt(name:String)
然后实现imageAt:
public Result imageAt(String imageName) throws FileNotFoundException {
File imageFile = new File("/path/to/image"+imageName);
if (imageFile.exists()) {
String resourceType = "image+"+imageName.substring(imageName.length()-3);
return ok(new FileInputStream(imageFile)).as(resourceType);
} else {
return notFound(imageFile.getAbsoluteFile());
}
}
就是这样。你放到" / path / to / image"将通过url / customerImage /访问 它们也可以通过像@ routes.Application.imageAt(imageName)
这样的还原路径访问