簡體   English   中英

Java從互聯網下載文件,鏈接中沒有名稱?

[英]Java download file from internet without name in link?

沒有直接URL時如何從互聯網下載文件? 主要問題-我在哪里可以獲取文件的名稱和擴展名?

例如,當URL =“ defaultSite.com/topic/9772.png”時,我們可以獲取字符串的最后一部分並創建文件“ 9772.png”,我們在其中保存字節流。

但是從URL這樣的:

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

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

我們不能使用文件名,但是我們可以毫無問題地保存字節流。 那么我該如何下載文件呢?

upd:MIME不能幫助我,因為文件可以具有特定的(用戶創建)擴展名,否則即使是.exe文件,它也會返回給我application / octet-stream。 除了問題白衣文件名還剩。

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

我需要一種可靠的方法來獲取名稱和擴展名。

更重要的是,服務器沒有建議文件名。 服務器可以添加到下載響應中的HTTP標頭之一是

Content-Disposition: filename=checkimage.jpg

或提示另存為

Content-Disposition: attachment; filename=checkimage.jpg

(checkimage.jpg is arbitrary here.)

如果服務器未提供文件名,則需要補一文件名。 並且,如果不使用附件形式,瀏覽器將使用HTTP標頭中還提供的MIME類型來決定在哪個應用程序中打開返回的數據。

http://www.skype.com/go/getskype ,我重定向到http://www.skype.com/go/getskype-macosx-a ,然后重定向到http://download.skype.com/macosx /Skype_6.3.59.582.dmg

因此,您需要遵循重定向,您正在使用的Java庫可能會自動執行此操作(但您尚未說明哪個),但是無論哪種方式,最后一次重定向都將是精確的URL。

暫無
暫無

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

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