求问:java怎么获取HTTP下载文件的默认文件名。。谢谢

罗道人J 2012-06-18 03:56:49
做一个java自动下载程序,下载方面已做好了,但是默认的文件名和后缀获取不到。

如这样一个URL

http://a.tgbus.com/download/33747/1

实际上下载下来是一个“银行大劫案BankJob.apk”文件。但是我在程序里面获取不到这个名字。

尝试获取了http头信息,使用的是HttpURLConnection.getHeaderFields(),但是获取到的信息如下

X-Powered-By:[ASP.NET]
X-AspNet-Version:[2.0.50727]
ETag:[BD8087CE545B83591454C74D7806A941]
Date:[Mon, 18 Jun 2012 06:35:12 GMT]
Content-Type:[application/vnd.android.package-archive]
null:[HTTP/1.0 200 OK]
Age:[4230]
Cache-Control:[public, max-age=31536000]
Connection:[keep-alive]
Content-Length:[12198650]
Expires:[Tue, 18 Jun 2013 06:35:12 GMT]
Accept-Ranges:[bytes]
X-Cache:[HIT from CT-GDSD-31-198.fastcdn.com]
Server:[Microsoft-IIS/6.0]

里面并没有文件名相关的内容。。。求问,这个文件名还有可能写在了什么地方?谢谢
...全文
2619 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
推云童子 2013-12-24
  • 打赏
  • 举报
回复 1
Content-Disposition: attachment; filename="服务器应答的文件名" 这是消息头里的一种情况 还有一种消息头里让你跳转到真实的URL 最后一种就是直接真实的URL 大致是这三种
jwsong2001ok 2013-12-23
  • 打赏
  • 举报
回复
http://a.tgbus.com/download/33747/1 不是一个直接的下载地址。用wireshark跟踪,你可以看到浏览器是发出了两次请求: 1、浏览器 发送get http://a.tgbus.com/download/33747/1 请求 2、服务器回一个 HTTP/1.1 302 Found,其中的Location才是真正的文件名 Date: Mon, 23 Dec 2013 09:47:30 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Location: http://d1.dn.anqu.com/apk/e9/18/dd6f7bfd447f93d8a7d71fca01ff_5ec3e6226d89dfe8d2d7bb49d6a742c44f4796b088f82f273899703a50b7f5f916230dfb4dabb052/%e9%93%b6%e8%a1%8c%e5%a4%a7%e5%8a%ab%e6%a1%88BankJob.apk 3、浏览器再发送一个GET /apk/e9/18/dd6f7bfd447f93d8a7d71fca01ff_5ec3e6226d89dfe8d2d7bb49d6a742c44f4796b088f82f273899703a50b7f5f916230dfb4dabb052/%e9%93%b6%e8%a1%8c%e5%a4%a7%e5%8a%ab%e6%a1%88BankJob.apk HTTP/1.1 请求去下载文件
老紫竹 2012-11-20
  • 打赏
  • 举报
回复
下载文件名有几个地方 1 是URL里面 2 在header里面的 attachment的filename里 建议你用fiddler等工具,跟踪一下下载的协议流程
hisome 2012-11-20
  • 打赏
  • 举报
回复
看其他人的说法,得到启发,解决了,希望能对你有帮助 URL testUrl = new URL("http://a.tgbus.com/download/33747/1"); HttpURLConnection conn = (HttpURLConnection) testUrl.openConnection(); conn.setFollowRedirects(true); int ret = conn.getResponseCode(); String fn=URLDecoder.decode(conn.getURL().toString(),"UTF-8"); System.out.println("------------"+ret+fn); System.out.println("------------"+ret+fn.substring(fn.lastIndexOf("/")+1)); InputStream in=conn.getInputStream(); InputStreamReader dis=new InputStreamReader(in); java.io.BufferedReader bf=new java.io.BufferedReader(dis); r=bf.readLine(); int k=0; while(r!=null) { System.out.println(r); r=bf.readLine(); k++; if(k>5)break; } conn.disconnect();
knlnzhao 2012-09-10
  • 打赏
  • 举报
回复
楼主解决这个问题了么?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧