我想知道如何使下载服务器更健壮。现在,我有一个服务器,在 https 上,存储 zip 文件,用随机哈希命名,由我的数据库索引。包含不允许列表(htaccess)的目录避免手动下载直接浏览服务器上的目录。
Java 应用程序显示文件的描述,如果用户想要下载它,他只需单击下载。Java应用程序,如果允许该用户下载,则将凭据发送到服务器上的我的PHP脚本,PHP脚本检查它们,再次检查该用户是否被允许下载该文件,从索引的数据库中检索filename.zip用户想要下载的文件 ID,并回显该文件名。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()?
我明白这个问题是笼统的。我怎样才能安全地做到这一点?