2013-04-04 53 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标头也提供了决定哪些应用程序在打开返回的数据。