PHP为Java应用程序提供下载服务


PHP to serve download for a Java application

我想知道如何使下载服务器更加健壮。目前,我在https上有一个服务器,存储zip文件,用随机哈希命名,由我的数据库索引。包含的目录不允许列表(htaccess),以避免手动下载直接浏览服务器上的目录。

Java应用程序显示文件的描述,如果用户想下载,只需点击下载即可。如果该用户被允许下载,Java应用程序会向服务器上我的PHP脚本发送凭据,PHP脚本会对其进行检查,再次检查该用户是否被允许下载该文件,从用户想要下载的文件ID索引的DB中检索filename.zip,并回显该文件名。Java应用程序读取该文件名并使用下载该文件

Url url = new URL("https://myserver.com/assets/theAssetToDownload.zip")
URLConnection urlConn = url.openConnection();
InputStream is = urlConn.getInputStream();
FileOutputStream fos = new FileOutputStream("test.zip");
byte[] buffer = new byte[4096];
int len;
while ((len = is.read(buffer)) > 0) {
    fos.write(buffer, 0, len);
}

(缩短代码,需要try/catch,is/fos.close()等)

到目前为止还不错,效果很好。。。但是如果有人在浏览器中输入直接url,文件也将被下载,而无需对授权进行明确检查。。。

所以我想,嘿,除了PHP脚本,不要让任何人访问资产目录!同样,这是一个简单的htaccess。

但是下载是如何提供的呢?

这会是我的PHP脚本中的头和输出吗,比如:

header("Content-type: application/octet-stream");
header("Content-disposition: attachment;filename=test.zip");
readfile(test.zip);

在这种情况下,我如何从Java端读取它?还有getInputStream()吗?

我确实理解这个问题是一般性的。我怎样才能安全地完成它?

您可以将文件存储在web无法访问但web服务器仍然可读的地方,然后使用htaccess将所有请求路由到您的php脚本。将其与您已经拥有的(头文件、readfile输出)和授权相结合,就应该如此