从http下载文件中检索文件名

时间:2012-12-08 12:47:32

标签: java http download filenames

我正在尝试从网络服务器下载文件并将其保存在服务器随文件发送的原始文件名下。下载工作得很好,但我无法获得真正的文件名。

我想尝试下载this file(Foxit PDF阅读器)。

如果我在Chrome等浏览器中使用此链接,则浏览器会下载包含版本等名称的文件。我从哪里获取此名称?我尝试阅读标题信息并正在搜索Content-Disposition,但服务器不会发送此信息。我从哪里获得确切的文件名?

我试过这样的事情:

try {            
  URL webfile = new URL("http://www.foxitsoftware.com/downloads/latest.php?product=Foxit-Reader");
  URLConnection con = webfile.openConnection();
  Map map = con.getHeaderFields();
  Set set = map.entrySet();
  Iterator iterator = set.iterator();
  while (iterator.hasNext()) {
      System.out.println(iterator.next());
  }
} catch (IOException ex) {
  System.out.println("Error: "+ex.getMessage());
}

正如您在输出中看到的那样,没有Content-Disposition

null=[HTTP/1.1 200 OK]
ETag=["244005-f36d40-4d003f3868000"]
Date=[Sat, 08 Dec 2012 12:29:02 GMT]
Content-Length=[15953216]
Last-Modified=[Tue, 04 Dec 2012 10:01:36 GMT]
Content-Type=[application/x-msdos-program]
Connection=[close]
Accept-Ranges=[bytes]
Server=[Apache/2.2.16 (Debian)]

那么如何检索确切的文件名呢?浏览器中的链接会下载名为FoxitReader544.11281_enu_Setup.exe的文件。

有什么想法吗?!

2 个答案:

答案 0 :(得分:3)

GET /downloads/latest.php?product=Foxit-Reader HTTP/1.1

给出HTTP/1.1 302 Found

的回复

并设置响应标头

Location: http://cdn04.foxitsoftware.com/pub/foxit/reader/desktop/win/5.x/5.4/enu/FoxitReader544.11281_enu_Setup.exe

最后,你发出,

GET /pub/foxit/reader/desktop/win/5.x/5.4/enu/FoxitReader544.11281_enu_Setup.exe HTTP/1.1

这就是文件名似乎来自的地方。 因此,如果重定向透明地发生,您仍然可能从请求参数中获取文件名。

答案 1 :(得分:2)

当您请求上面的URL时,服务器正在响应302重定向到(标题键:位置):http://cdn04.foxitsoftware.com/pub/foxit/reader/desktop/win/5.x/5.4/enu/FoxitReader544.11281_enu_Setup.exe和FoxitReader544.11281_enu_Setup.exe是我点击时保存到我的计算机的文件名原始链接。