约战
约战
  • 发布:2015-04-27 10:49
  • 更新:2019-12-19 21:31
  • 阅读:2682

关于downloadtask的totalSize丢失的问题

分类:HTML5+

请问为什么totalSize为0?? 是否服务器端要设置什么?

function downWgt(newVer){  
    var w=plus.nativeUI.showWaiting("正在下载更新包");  
    var dtask = plus.downloader.createDownload( updateServerUrl+"/"+newVer+'.wgt', {filename:"_doc/update/"}, function(d,status){  
        if ( status == 200 ) {   
            console.log("下载更新包成功:"+d.filename);  
            installWgt(d.filename); // 安装wgt包  
        } else {  
            console.log("下载更新包失败!");  
            plus.nativeUI.alert("下载更新包失败,请检查您的网络状况");  
        }  
//      plus.nativeUI.closeWaiting();  
        w.close();  
    });  

    dtask.addEventListener( "statechanged", function(d,status){  
      switch(d.state) {  
            case 1: // 开始  
                w.setTitle("正在下载更新包\n开始下载...")  
                console.log( "开始下载..." );  
            break;  
            case 2: // 已连接到服务器  
                w.setTitle("正在下载更新包\n连接到服务器...")  
                console.log( "链接到服务器..." );  
            break;  
            case 3: // 已接收到数据  
                w.setTitle("正在下载更新包\n下载数据: "+d.downloadedSize+"/"+d.totalSize )  
            break;  
            case 4: // 下载完成  
                w.setTitle("正在下载更新包\n下载完成")  
                console.log( "下载完成" );  
            break;  
        }  

    } );  

    dtask.start();  

}
2015-04-27 10:49 负责人:无 分享
已邀请:
约战

约战 (作者)

没人回答我的问题吗?检查了服务器端是有content-length的

这是例子http://snip.qq.com/resources/Snip_V2.0_5771.dmg的header

Server=nginx/1.6.2  
Date=Tue, 28 Apr 2015 01:55:05 GMT  
Content-Type=application/octet-stream  
Content-Length=3020619  
Connection=close  
Last-Modified=Wed, 05 Dec 2012 07:08:38 GMT  
ETag="26993a-2e174b-4d015a6ca2980"  
Accept-Ranges=bytes

这是我做的下载php的代码

<?php  

             $filePath = $_GET['version'].".wgt";  
             if(file_exists($filePath)){  
                     header('content-type:application/octet-stream');  
                     header('Accept-Ranges: bytes');  
                     header('content-length: '.filesize($filePath));  
                     //echo filesize($filePath);  
                     //header('content-disposition:attachment;filename='.$filePath);  
                     $fp = fopen($filePath, "r");  
                     echo fread($fp, filesize($filePath));  
                     fclose($fp);  
             }  

?>

对应的头

Date=Tue, 28 Apr 2015 02:23:15 GMT  
Server=Apache/2.2.23 (Unix) PHP/5.6.8  
X-Powered-By=PHP/5.6.8  
Accept-Ranges=bytes  
Content-Length=2258445  
Vary=Accept-Encoding  
Connection=close  
Content-Type=application/octet-stream  
约战

约战 (作者)

在下载期间,totalSize一直为0啊,但是downloadedSize有值,是bug吗?

约战

约战 (作者)

找到问题了,content-length丢失,所以totalsize一直为0;

content-lenth丢失是因为请求头用了gzip和trunked模式

所以最后发现问题出在我用的apache 的deflate_Module配置错误了,重新配置了一下,就可以出totalsize了。

  • wenju

    亲 是不是得服务器设置才有值呢 ?我这边随便下载一个网络图totalSize一直为0,downloadedSize有值

    2015-06-26 10:12

  • 2***@qq.com

    同问,是必须改服务器配置么

    2017-05-08 11:53

  • l***@163.com

    有没有解决这个问题的

    2018-02-28 11:28

p***@126.com

p***@126.com

有没有跟全面的回答,服务器给怎么设置

该问题目前已经被锁定, 无法添加新回复