批量下载文件,怎么实现呢?求思路

LEO_Heracles 发布于 2014/07/29 17:18
阅读 404
收藏 0
背景:在一个网页上,有很多链接,分别指向不同的文件,点击链接之后出现一个下载页面,再点击“按钮”方可下载,如果要实现批量下载的话,如何实现呢?编程语言上哪种比较好实现,求思路
加载中
0
饶飞成
饶飞成

浏览器设置为自动下载,然后你把所有链接在不同的iframe中打开,这样就可以使这些链接自动批量下载。
每个链接现在完成后就打开另一个链接,再继续下载。

编程语言那种都好实现,前提是你会。

LEO_Heracles
LEO_Heracles
谢谢你,只是目前的困难是,我得提取出下载的地址,当前的链接并不是一个下载地址,进去之后才有下载地址,有点像二阶指针,直接复制粘贴链接还是太麻烦了
0
figer1
figer1

批量下载只要支持多线程的应当都挺简单,下面用AAuto写一个简单例子:

import win.ui;
/*DSG{{*/
var winform = ..win.form(text="多线程多文件断点续传下载";right=765;bottom=399)
winform.add(
button={cls="button";text="多线程多文件断点续传下载";left=478;top=356;right=703;bottom=392;db=1;dr=1;z=2};
listview={cls="listview";left=10;top=16;right=757;bottom=346;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;edge=1;z=1}
)
/*}}*/

//创建下载线程管理器
import thread.dlManager;
var dlmgr = thread.dlManager(5/*最多允许五个线程同时下载*/);

//响应下载事件
dlmgr.onReciveBegin = function(id,url,filename,statusText,httpStatusCode,totalSize,downSize){
    winform.listview.setItemText( {url;filename;statusText;fsys.formatSize(totalSize);fsys.formatSize(downSize) },id )
}
dlmgr.onRecive = function(id,sizePs,downSize){
    winform.listview.setItemText( fsys.formatSize(downSize),id,6);
    winform.listview.setItemText( fsys.formatSize(sizePs) + "/s" ,id,5);
}
dlmgr.onEnd = function(id,savepath,resumePath,contentLength){ 
    if( savepath ){ 
        winform.listview.setItemText(  "已完成"  ,id,3);
        winform.listview.setItemText( fsys.formatSize(contentLength),id,4);
    }
    else {
        winform.listview.setItemText(  "已停止"  ,id,3);
    }
    winform.listview.setItemText(  "0KB/s"  ,id,5); 
    //fsys.delete(resumePath)
}
dlmgr.onError = function(id,err){
    winform.listview.setItemText( err,id,3);
}

winform.button.oncommand = function(id,event){	
    winform.button.disabled = true; 
    winform.text = "正在查找文件下载链接"
    
    var links = win.invoke(
        function(){
            import inet.whttp
            
            //抓取指定网页提取超链接
            var http = inet.whttp()
            var html = http.get("http://bbs.aau.cn/portal.php?mod=view&aid=2") 
            var links = {}
            for _,_,href in string.gmatch( html,"(\s+href\s*=\s*([""'])([^""']+)\2)") { 
                if( !..string.find(href,"@@AAuto") ) continue ;
                http.head(href)  
                if( http.readHeader("Accept-Ranges:")  ){  //这里检测是网页还是文件 
                    table.push(links,href); 
                }  
            } 
            
            return links;
        } 
    )
    
    //开始批量下载
    for(k,url in links){
        dlmgr.push( 
            id = winform.listview.addItem( url );
            url = url; 
            savedir = "/downlaod/"; 
        ) 
    }
}

//下载任务右键管理菜单
import win.ui.menu;
winform.listview.onnotify = function(id,code,ptr){  
      if( code = 0xFFFFFFFB/*_NM_RCLICK*/ ){
      
          var x,y = win.getMessagePos();  
          var nmListView = winform.listview.getNotifyMessage(code,ptr);
          
          //创建弹出菜单
        var popmenu = win.ui.popmenu(winform); 
        popmenu.add('取消',function(id){ 
            dlmgr.cancel( nmListView.iItem )
        } )
        popmenu.popup(x,y,true);
        popmenu.close();
      }
}

//关闭窗体时停止所有下载
import thread.event;
winform.onClose = function(hwnd,message,wParam,lParam){
    winform.text = "正在等待关闭"; 
    dlmgr.quit();
}

//初始化listview控件
winform.listview.insertColumn("网址",180);
winform.listview.insertColumn("文件名",180);
winform.listview.insertColumn("状态",100);
winform.listview.insertColumn("大小",80);
winform.listview.insertColumn("速度",80);
winform.listview.insertColumn("已下载",120);
winform.listview.adjust = function(cx,cy){
    winform.listview.fillParent(1);
}
 
//显示主窗体
winform.show() 
win.loopMessage();



LEO_Heracles
LEO_Heracles
谢谢,抓取指定网页提取超链接是这个网页上所有的超链接嘛?
0
figer1
figer1

调用迅雷的云加速SDK也不错,也可以批量下载,http://bbs.xunlei.com/forum-155-1.html 官网论坛看看示例

LEO_Heracles
LEO_Heracles
谢谢你,我来好好看看,如果还有疑问,到时候还得向你求助
返回顶部
顶部