Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP为Java应用程序提供下载服务_Java_Php_Download_Serving - Fatal编程技术网

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

PHP为Java应用程序提供下载服务,java,php,download,serving,Java,Php,Download,Serving,我想知道如何使下载服务器更健壮。现在,我有一个服务器,在https上,存储zip文件,用随机散列命名,由我的数据库索引。包含的目录不允许列表(htaccess),以避免手动下载并直接浏览服务器上的目录 Java应用程序显示文件的描述,如果用户想要下载,只需单击下载。Java应用程序,如果允许该用户下载,将凭据发送到服务器上的我的PHP脚本,PHP脚本将检查这些凭据,再次检查是否允许该用户下载该文件,从数据库中检索filename.zip,该文件由用户要下载的文件ID索引,并回显该文件名。Java

我想知道如何使下载服务器更健壮。现在,我有一个服务器,在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脚本,不要让任何人访问资产目录!同样,这是一个简单的访问

但是下载是如何提供的呢

在我的PHP脚本中,这是一个标题和输出,如:

header("Content-type: application/octet-stream");
header("Content-disposition: attachment;filename=test.zip");
readfile(test.zip);
在这种情况下,我如何从Java方面理解它?是否也使用getInputStream()


我明白这个问题是一般性的。如何安全地执行此操作?

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

这里的问题只是您提供了这些文件的直接http下载。你不应该。不返回文件名,因此下载文件的url应该返回文件的内容。就是这样。是的,我知道这个问题,这就是为什么我决定在重写我想要的所有内容之前询问那些知道如何做的人,以确保使用的是header/readfile方法。谢谢你的回答!你好,心理杀手1888。只是一个简短的提示-我们鼓励这里的博文作者接受对其材料的良好编辑。请参阅帮助文章如果作者的意思发生了更改,则可以再次编辑,但此处并非如此。谢谢您的回答!在Java方面,如何在PHP readfile()之后重建文件?好的,让它工作起来,它和我已有的一样简单,getInputStream()完成了它!非常感谢。