簡體   English   中英

PHP 為 Java 應用程序提供下載服務

[英]PHP to serve download for a Java application

我想知道如何使下載服務器更健壯。 現在,我有一個服務器,在 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()?

我確實理解這個問題是通用的。 我怎樣才能安全地做到這一點?

您可以將文件存儲在無法從網絡訪問的地方,但仍然可以被網絡服務器讀取,然后使用 htaccess 將所有請求路由到您的 php 腳本。 將其與您已有的內容(標頭、帶有 readfile 的輸出)和授權相結合,應該就是這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM