2013-04-04 52 views
1

如何從互聯網上下載文件,當它沒有直接的URL?主要問題 - 我可以在哪裏取文件的名稱和擴展名?Java從互聯網下載文件沒有鏈接名稱?

例如,當URL =「defaultSite.com/topic/9772.png」時,我們可以取字符串的最後部分並創建文件「9772.png」,在那裏我們保存字節流。

但是從URL,如:

http://www.skype.com/go/getskype

https://www.dropbox.com/download?plat=win

我們不能把文件名,但字節流,我們可以沒有問題保存。那麼我該如何下載文件呢?

更新: MIME不能幫助,因爲我認爲,因爲文件可以有特定的(用戶創建的)擴展名,或者即使對於.exe文件它也返回給我應用程序/八位字節流。除了問題惠特文件名左。

upd2: 是的,服務器返回標題,但它可能沒有文件名。 有通過Skype例如:

conn.getHeaderField 0 : HTTP/1.1 200 OK 
conn.getHeaderField 1 : nginx 
conn.getHeaderField 2 : application/octet-stream 
conn.getHeaderField 3 : 30619240 
conn.getHeaderField 4 : Thu, 28 Feb 2013 19:35:47 GMT 
conn.getHeaderField 5 : bytes 
conn.getHeaderField 6 : max-age=86400 
conn.getHeaderField 7 : Thu, 04 Apr 2013 14:52:26 GMT 
conn.getHeaderField 8 : keep-alive 
conn.getHeaderField 9 : S 

我需要一個可靠的方式來獲得名和擴展名。

+0

網絡沒有文件的概念,只有URL。 – Zutty 2013-04-04 14:38:17

+0

您需要了解HTTP響應和MIME – Ingo 2013-04-04 14:38:54

+0

您得到的HTTP響應可能包含帶文件名的「Content-disposition」標頭,但它不是強制性的。 – khachik 2013-04-04 14:40:39

回答

2

更重要的是,服務器不提示文件名。其中一個HTTP標頭的服務器可以添加到下載響應的是

Content-Disposition: filename=checkimage.jpg 

或給予另存爲提示

Content-Disposition: attachment; filename=checkimage.jpg 

(checkimage.jpg is arbitrary here.) 

如果服務器不提供文件名,那麼你需要做一個。而且,如果不使用附件形式,瀏覽器將使用MIME類型的HTTP標頭也提供了決定哪些應用程序在打開返回的數據。