2013-07-19 73 views
1

我正在編輯由另一個開發人員創建的網站。 嘗試不同的方式來下載一些文件,我注意到了這一點:html直接鏈接下載不適用於不同的文件編碼

我參加了一個隨機文件,並把文件中的網站

1)的根文件夾重命名文件「a.exe的」, 如果我瀏覽至「www.mysite.com/a.exe」開始文件下載。

2)重命名文件「a.pdf」, 如果我瀏覽到「www.mysite.com/a.pdf」瀏覽器試圖打開PDF文件。

3)重命名文件「a.txt」, 如果我瀏覽到「www.mysite.com/a.txt」開始文件下載。

4)重命名文件「a.jpg」, 如果我瀏覽到「www.mysite.com/a.jpg」瀏覽器嘗試顯示圖像。

5)重命名文件「a.apk」, 如果我瀏覽到「www.mysite.com/a.apk」服務器迴應「404 - 文件或目錄未找到。」。

但是......爲什麼?該文件是相同的,並始終在同一文件夾中,爲什麼突然間似乎「消失」?

以前的開發人員設計了一個服務器端的解決方法,使其可以下載apk文件。

,但我不能相信,下載一個文件,我不能簡單地寫

<a href="www.mysite.com/a.apk"> DOWNLOAD </ a> 

,因爲它所有的文件類型的作品,除了與apk文件...

回答

5

找到解決方案!如果我們想下載apk文件,我們必須告訴網站應該如何表現。 要做到這一點添加到web.config中:

<system.webServer> 

    <staticContent> 

     <mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive" /> 

    </staticContent> 

</system.webServer> 

後來乾脆建立這樣一個鏈接:

<a href="myappPath.apk">DOWNLOAD</a> 

這一切!

2

託管服務器網站可能不知道這種文件類型的擴展(MIME類型)。每個擴展都在服務器中聲明。通過這些聲明,您可以允許和拒絕通過互聯網訪問的文件類型。 您可能必須將文件擴展名添加到服務器。

的MIME聲明爲APK應用/vnd.android.package歸檔

+0

你知道我該怎麼做?我認爲有機會在某處寫入某些內容,例如在web.config或類似的配置文件中。 – benVG

+0

您使用的是什麼類型的服務器? IIS/Apache? –

+1

您需要更改Web服務器配置文件以獲得可靠的結果。例如。 apache有一個文件'mimetype.conf',它包含擴展名和mime類型之間的映射關係。 – collapsar

0

Web服務器,客戶端操作系統和用戶代理在確定下載的資源的內容類型進行交互。 Web服務器發送http頭告訴客戶端發送的內容代表什麼,並可以添加標題,通過它可以指定是否將內容保存爲文件並可以建議文件名。但是,瀏覽器中的用戶設置可能會覆蓋此設置。瀏覽器和OS與內容類型和/或操作的文件擴展名關聯也可能會受到干擾。一個文件擴展名將成爲url路徑部分的結尾(即使對於動態創建的資源也是如此)。

如果您不需要瀏覽器集成,請查看命令行工具curlwget,您可以在其中明確指定將下載的數據保存在給定的文件名下。

例如。 (linux;對於windows用雙引號替換所有單引號;顯然,不需要用戶/密碼用於不受保護的資源):

wget --no-cache --no-check-certificate --no-proxy 
    --output-document='<target_file_name>' 
    --auth-no-challenge --http-user='<user>' --http-password='<pw>' '<url>'