获取 url 资源名称问题。

_______-- 2009-01-16 04:12:43
现在需要完成一个批量获取文件名的功能,就类似快车或者迅雷批量导入那样的功能。
然后,现在已知的url均为http协议,并且,形式暂时有两种:
直接真实地址:如http://web.file.txtbook.com.cn/down20071008/2009-01/%C6%BD%B7%B2%B5%C4%C7%E5%B4%A9%C8%D5%D7%D3.rar
还有转发/重定向地址:如http://www.txtbook.com.cn/txtbuk/download.asp?softid=3870&downid=7&id=4783

真实地址好说,用 URL.getFile 然后截取字符串就可以了,
但是,重定向地址怎么办?
http://www.txtbook.com.cn/txtbuk/download.asp?softid=3870&downid=7&id=4783
需要重定向到下一个有效的地址,然后才能获取,怎么实现让程序以 http://www.txtbook.com.cn/txtbuk/download.asp?softid=3870&downid=7&id=4783 继续向下走然后走到 真实地址,在获取文件名呢?
...全文
213 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
_______-- 2009-01-18
  • 打赏
  • 举报
回复
基本解决了,
http://www.txtbook.com.cn/txtbuk/download.asp?softid=3870&downid=7&id=4783
这个地址是转到一个页面,然后那个页面通过 javascript 进行控制再重定向的,所以 HttpURLConnection 获取不到 302
  • 打赏
  • 举报
回复
文件的下载名称可以通过使用如下语句设置,这样另存以后就是你指定的文件名
response.setHeader("Content-Disposition","attachment;filename=<filename>");

巧了我上次一个项目让我解决的问题就是如何支持迅雷下载。迅雷的原理是监控浏览器,
一旦浏览器和服务器建立一个文件输出流的连接就获取建立连接的url然后迅雷自己再利用
这个url发送一个http请求。我们当时的项目有一个filter可以检查连接,如果你用迅雷的
话,可以很清楚的看到同一个url被请求了两次。但是迅雷产生对的连接是没有session信息的
所以迅雷下载不了需要用session来验证的资源。

如果你想获取流形式下载的文件的名称估计比较麻烦,可能你需要分析协议了


_______-- 2009-01-16
  • 打赏
  • 举报
回复
呃,问了公司一个人,forword 的资源一般都要设置:Content-Disposition 的 file name 吧,直接取这个,如果没有,再想办法。。。
_______-- 2009-01-16
  • 打赏
  • 举报
回复
忘了重点了,
我这个的重点在于,获得url最终指向的文件的文件名~~
没思路,头大。。。
_______-- 2009-01-16
  • 打赏
  • 举报
回复
那就只有重定向的地址可以获得了。。。

看了相关资料, 状态码 为 3xx 的是重定向,那么就可以通过获取一次
getResponseCode()
来实现重定向。。。
但是这招放在我提供的那个地址上却不好用了= =||
命名也是重定向。。

还有,迅雷,快车之类的这类功能是怎么实现的呢?
好像都是在开始下载以后文件自动命名了。。。
  • 打赏
  • 举报
回复
而且有可能即使你知道了也没有用,因为很有可能文件的真实地址在WebRoot目录之外,你是访问不了的
  • 打赏
  • 举报
回复
前两天参与的一个项目里边我负责下载功能的实现。就是利用一个id从数据库里边查找到真实的文件地址
然后打开写回response的输出流里边。凡是利用这种机制实现的你是不可能知道真实的地址的,因为都是
通过forwrad来实现的,url根本就不变。
yunyouyou 2009-01-16
  • 打赏
  • 举报
回复
美女,顶起,,,

这个没研究过,,

等待好心人到来,,
  • 打赏
  • 举报
回复
要我看肯定是不行的,重定向获取地址好说,因为服务器端要发送一个重定向命令告诉你
需要重定向的地址是什么,你就是不用他的程序直接在ie的地址栏里边也能看到重定向后的地址。
至于下载就另是一回事了,下载用的是服务器端的forward,是人家内部的事情你怎么会知道呢
_______-- 2009-01-16
  • 打赏
  • 举报
回复
http://www.blogjava.net/amigoxie/archive/2007/10/09/151341.html
找到这个看了看,他的地址行,我这测试也行,可是我这两个地址就不行。。。。

81,094

社区成员

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

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