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

标签 java php download serving

我想知道如何使下载服务器更加健壮。目前,我有一个基于 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() 等)

到目前为止一切顺利,效果很好...但是...如果有人在浏览器中输入直接网址,文件也会被下载,而无需明确检查授权...

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

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

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

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

那么,我如何从 Java 端读取它?还带有 getInputStream()?

我确实知道这个问题是通用的。我怎样才能安全地做到这一点?

最佳答案

您可以将文件存储在无法从网络访问但网络服务器仍可读的位置,然后使用 htaccess 将所有请求路由到您的 php 脚本。将其与您已有的内容( header 、带有 readfile 的输出)和授权相结合,就应该是这样。

关于java - PHP 为 Java 应用程序提供下载服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34116881/

相关文章:

java - JAVA中的Microsoft Office 365邮件REST API

ios - 如何使用 swift 更改 iPhone 移动 iOS 中的下载路径

java - BufferedReader 运行速度极慢

java - ObjectOutputStream 方法 writeObject 在 android 上挂起

java - WebDriverWait 的包装器可以接受各种 ExpectedConditon?

Java Applet 与 Mysql ExceptionInInitializerError

php - 如何连接回显字符串以在从 MySQL 中提取的值周围包含文字单引号?

php - DB 不会从 php 脚本渲染

php - Htaccess - 验证是否 Cookie ISSET

powershell - 使用 PowerShell FTP 下载多个文件