如何在Play Framework 2中使用恢复功能提供文件下载?
我曾经使用过这条路线:
GET /assets/*file controllers.Assets.at(path="/public", file)
和这个动作:
public static Result downloadFile(String filePath) {
File file = new File("public/files/"+filePath);
return ok(file);
}
但他们没有用。
答案 0 :(得分:2)
您应该使用HTTP字节范围。我知道这是视频流的问题,这里有一个拉取请求:
https://github.com/playframework/playframework/issues/1097
但这不是Play本身的一部分。
答案 1 :(得分:1)
您可以在Apache Http服务器后面设置Play并将下载委派给Apache,方法是将其添加到Apache Http Server的apache2.conf
文件中:
<VirtualHost *:80>
ServerName <domainname.com>
#This skips the proxy if the url is <domainname.com>/downloads
ProxyPass /downloads !
Alias /downloads /var/www/html/downloads
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
</VirtualHost>
之后在routes.conf
中添加指向下载文件的路由
/downloadapp controllers.Application.download()
在下载方法中使用以下内容:
public static Result download()
{
return redirect("http://<yourdomain.com>/downloads/file.rar");
}
或者只是将链接直接放在html页面中。
<a href=”http://<yourdomain.com>/downloads/file.rar”>Download</a>
答案 2 :(得分:0)
我在github上使用了以下代码(java),效果很好: