2013-03-27 40 views
0

我正在使用播放框架2.1.0,将文件上传到play-app/upload文件夹。我运行play 'start -Dhttp.port=80'启动服务器。在播放框架中读取上传文件

但是当我上传文件到play-app/upload文件夹,它不能立即访问。

如果我停止服务器并重新启动,那么我可以访问该文件。

我该如何解决这个问题?非常感谢。

ps的,我下面的路线/upload

GET  /upload/*file    controllers.Assets.at(path="/upload", file) 

难道是静态的文件被加载一次?我该如何解决它?

回答

1

最好创建上传文件夹中的应用程序的文件夹之外,并添加它/home/navins/upload-folder/路径application.conf,那么你就可以访问它的全部时间,你也将能够不仅与应用有上传文件(即通过FTP)而不需要重新启动。

+0

,但我不能直接访问整个像HTTP文件://localhost/upload/xxx.doc – navins 2013-03-27 10:20:55

1

我想你需要的是定义一种Remote assets控制器。基本上,一旦文件被上传,你就把它放在应用程序文件夹外的文件夹中。然后,使用一个可以让你访问它的控制器。下面是一个例子:http://www.jamesward.com/2012/08/08/edge-caching-with-play2-heroku-cloudfront

在这里,James Ward创建一个控制器来访问存储在cloudfront上的资产,您需要做的是编写一个类似的控制器,并用您的绝对路径替换“content url” “上传的文件目录”。

+0

THX,我几乎是这样做的。 – navins 2013-03-29 16:52:52

1

终于什么我已经在控制器中加入访问方法解决这个问题:

public static Result view(String filename) { 
    File file = new File(Play.application().path().getAbsolutePath() + "/upload/" + filename); 
    return ok(file); 
} 

然后,改变航线的conf,你可以通过该方法访问这些文件。

顺便说一句,如果你正在使用低于2.0播放框架,你可以将用户:

renderBinary(file, ContentType);