近期遇到一位小伙伴要实现批量下载,然后他给我的思路是把要下载的文件集合在服务器压缩打包下载,这一看就是新手思路哈。如果文件太大,那么打包带来的一系列问题怎么办?先不说空间资源消耗,CPU怎么办, 内存怎么办。所以。。。
思路很多,比如做种子,比如做迅雷链接等,反正不要去打包,就可以了。
我只是想要下些东西,那么在不考虑带宽的前提下,为了达到这个目的,我们完全可以依赖现在成熟的工具啊,比如迅雷,QQ等下载工具。
下面把关键代码放出来,供大家学习。
JAVA代码:
这里用到了Sun公司提供的 javabase64-1.3.1.jar
有几个规则需要先了解:
//迅雷的编码规则为:原地址前面加"AA",后面加"ZZ",然后进行Base64编码,最后加上迅雷下载协议"Thunder://"组成完整的下载链接
//快车的编码规则:原地址前后都加上"[FLASHGET]",注意后面还要加上"&",符号怎么得出不清楚,在最后面加的是其他个人信息,至今未有人报告转换错误
//旋风相对就简单多了:将原地址直接base64编码加上下载协议就好了
以下为JAVA测试代码:
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* BASE64编码专用链接
*/
public class JavaBase64 {
public static void main(String[] args) {
String resource = "http://192.168.56.1:8080/portal2.7z";
//迅雷的编码规则为:原地址前面加"AA",后面加"ZZ",然后进行Base64编码,最后加上迅雷下载协议"Thunder://"组成完整的下载链接
String resourceForThunder = "Thunder://" + getBASE64("AA" + resource + "ZZ");
//快车的编码规则:原地址前后都加上"[FLASHGET]",注意后面还要加上"&",符号怎么得出不清楚,在最后面加的是其他个人信息,至今未有人报告转换错误
String resourceForFlashget = "Flashget://" + getBASE64("[FLASHGET]" + resource + "[FLASHGET]") + "&something";
//旋风相对就简单多了:将原地址直接base64编码加上下载协议就好了
String resourceForQQDownLoad = "qqdl://" + getBASE64(resource);
System.out.println(resourceForThunder);
System.out.println(resourceForFlashget);
System.out.println(resourceForQQDownLoad);
//解码调用getFromBASE64,注意不要将resourceForThunder直接进行解码,因为当中含有"Thunder://"等未经过编码的字符
System.out.println("迅雷链接解码:"+getFromBASE64("QUFodHRwOi8vMTkyLjE2OC41Ni4xOjgwODAvcG9ydGFsMi43elpa"));
}
//BASE64 编码
public static String getBASE64(String s) {
if (s == null)
return null;
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(s.getBytes());
}
//BASE64 解码
public static String getFromBASE64(String s) {
if (s == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
return new String(b);
} catch (Exception e) {
return null;
}
}
}
执行结果:
- Thunder://QUFodHRwOi8vMTkyLjE2OC41Ni4xOjgwODAvcG9ydGFsMi43elpa
- Flashget://W0ZMQVNIR0VUXWh0dHA6Ly8xOTIuMTY4LjU2LjE6ODA4MC9wb3J0YWwyLjd6W0ZMQVNIR0VUXQ==&something
- qqdl://aHR0cDovLzE5Mi4xNjguNTYuMTo4MDgwL3BvcnRhbDIuN3o=
- 迅雷链接解码:AAhttp://192.168.56.1:8080/portal2.7zZZ
当然除了用第三方包,我们也可以自己实现,详见 http://baike.baidu.com/view/469071.htm 代码实现部分