peter_yu
peter_yu
  • 发布:2016-04-22 13:56
  • 更新:2016-04-23 01:30
  • 阅读:1938

离线文件问题

分类:HTML5+
Zip

你好,我问个问题。我现在的应用是有个离线点读课件的app.APP既支持在线点读,又支持离线点读。
离线点读我的方案是: 从服务器下载一个包含html,js,css,图片文件,音频文件的压缩文件。
我看了一下已经下载下来。下载的路径为_downloads/7.zip。
下载完后解压,到_downloads/7目录下。

然后在往websql中记录一条记录去记录下载的课件信息。

然后展现,供离线点读。

离线点读的方案是我打开_downloads/7/diandu.html

然后里面的各种图片,mp3资源都在zip里面。都为相对路径访问

我不知道我这种方案能否实现。

多谢。

我现在遇到的问题是解压的时候报错了。
日志是这样的
链接到服务器... at html/studytool/diandu_list.html:255
Download success: _downloads/7.zip at html/studytool/diandu_list.html:230
下载完成! at html/studytool/diandu_list.html:261
46738303 at html/studytool/diandu_list.html:262

文件都已经存在了。报下面的错误
Compress error!{"code":2,"message":"open failed: EINVAL (Invalid argument)"}
plus.zip.decompress("_downloads/7.zip", "_downloads/",
function() {
alert("Decompress success!");
},
function(error) {
console.log("Compress error!" + JSON.stringify(error));
});

2016-04-22 13:56 负责人:无 分享
已邀请:
DCloud_heavensoft

DCloud_heavensoft

比照下Hello H5 里zip示例的写法,把同样的zip文件,放到Hello H5 那个示例里是否可以。
检查zip的合法性,非标准zip算法压缩的包不支持。

再不行报操作系统,然后邀请DCloud_iOS或DCloud_Android的同事解决。

其实你也可以不解压,直接一个一个下载。主要下载媒体文件,HTML和样式仍然写在www目录里的app里。

  • peter_yu (作者)

    我在hello h5也试过了。一样的啊。怎么办啊。比较急

    2016-04-23 01:32

peter_yu

peter_yu (作者) - 承接各种彩票类,电商类app,有现成的案例有需要联系

下面是我的代码。现在反正就是死活报这个错。跪求解决啊Compress error!{"code":2,"message":"open failed: EINVAL (Invalid argument)"}

<!DOCTYPE html>  
<html>  

    <head>  
        <meta charset="utf-8">  
        <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">  
        <meta name="apple-mobile-web-app-capable" content="yes">  
        <meta name="apple-mobile-web-app-status-bar-style" content="black">  
        <link rel="stylesheet" href="../../css/aui.css" />  
        <!--标准mui.css-->  
        <link rel="stylesheet" href="../../css/mui.css">  
    </head>  
    <style type="text/css">  
        body {  
            background: #FFFFFF;  
        }  
        /*重新定义*/  

        .aui-list-view {  
            border-radius: 6px;  
        }  

        .aui-list-view:after {  
            border-top: 0;  
        }  

        .aui-list-view:before {  
            border-top: 0;  
        }  

        .aui-grid-sixteen li .aui-iconfont {  
            background: #ff9900;  
            color: #ffffff;  
            width: 38px;  
            height: 38px;  
            line-height: 38px;  
            border-radius: 50%;  
            font-size: 20px;  
        }  
        /*自定义*/  

        .icons {  
            margin-top: 15px;  
        }  

        .image img {  
            width: 100%  
        }  

        p {  
            font-size: 12px;  
            margin-bottom: 5px;  
        }  

        .content {  
            font-size: 12px;  
        }  

        .aui-iconfont {  
            color: #ffffff;  
        }  

        .slider {  
            margin-bottom: 0;  
        }  

        .slider img {  
            width: 100%;  
            height: 120px;  
            display: inherit;  
        }  

        .aui-grid-sixteen:after {  
            border: none;  
        }  

        .aui-grid-sixteen li:after {  
            border: none;  
        }  

        .aui-grid-sixteen li .aui-iconfont {  
            color: #ffffff;  
            width: 38px;  
            height: 38px;  
            line-height: 38px;  
            border-radius: 50%;  
            font-size: 20px;  
        }  

        p.goods-title {  
            font-size: 1em;  
            color: #333;  
        }  

        p.goods-info {  
            font-size: 12px;  
            color: #999;  
        }  

        .aui-line-x {  
            margin: 5px 0;  
        }  

        .aui-line-x:after {  
            border-color: #ddd;  
        }  

        .goods-price {  
            font-size: 0.875em;  
        }  

        .goods-price strong {  
            margin: 0 5px;  
            font-size: 16px;  
        }  
    </style>  

    <body>  
        <header class="mui-bar mui-bar-nav">  
            <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>  
            <h1 class="mui-title" id="title">课本点读</h1>  
        </header>  
        <div class="mui-content">  
            <div id="myhead">  
                <div class="my-info">  
                    <img src="../../images/4.jpg" width="100%" height="100px" id="myimg">  
                </div>  
            </div>  
            <p class="aui-padded-10" style="background-color: #607FA6">  
                课本点读  
            </p>  
            <ul class="aui-grid-sixteen">  
                <li class="aui-col-xs-4 aui-text-center" id="diandu">  
                    <img src="../../images/clickread.png" width="50px" height="50px" />  
                    <p>在线点读</p>  
                </li>  
                <li class="aui-col-xs-4 aui-text-center" id="download">  
                    <img src="../../images/download.jpg" width="50px" height="50px" />  
                    <p>下载课件</p>  
                </li>  
            </ul>  
            <p class="aui-padded-10" style="background-color: #607FA6">  
                本地课件  
            </p>  
            <div class="mui-scroll">  
                <ul id="detail" class="aui-list-view aui-grid-view">  
                    <li class="aui-list-view-cell aui-img aui-col-xs-4" data-id="7">  
                        <div style="position: relative;">  
                            <div style="position: absolute;max-width:50px;">  
                            </div>  
                            <img src="../../images/chinese.jpg" width="80px" height="100px" />  
                        </div>  
                        <div class="aui-img-body" style="font: '微软雅黑';font-size: 12px;">英语五年级上(沪教版)</div>  
                    </li>  
                </ul>  
            </div>  
        </div>  
        <script type="text/javascript" src="../../js/md5.js"></script>  
        <script src="../../js/mui.min.js"></script>  
        <script src="../../js/ajax.js"></script>  
        <script>  
            mui.init({  
                swipeBack: false  
            });  
            var db;  
            mui.plusReady(function() {  
                db = openDatabase('bookDB', '1.0', 'book DB', 2 * 1024 * 1024);  
                db.transaction(function(context) {  
                    //如果不存在就创建表  
                    context.executeSql('CREATE TABLE IF NOT EXISTS book (name,imgurl,id)');  
                    //执行查询本地课本  
                    context.executeSql('SELECT * FROM book', [], function(context, results) {  
                        var len = results.rows.length;  
                        var div = "";  
                        for (var i = 0; i < len; i++) {  
                            var name = results.rows.item(i).name;  
                            var imgurl = results.rows.item(i).imgurl;  
                            var id = results.rows.item(i).id;  
                            div += "<li class='aui-list-view-cell aui-img aui-col-xs-4' data-id='" + id + "'><img class='aui-img-object' src='" + imgurl + "'><div class='aui-img-body'>" + name + "</div></li>";  
                        }  
                    });  
                });  
                //在线点读  
                document.getElementById("diandu").addEventListener('tap', function() {  
                    mui.openWindow({  
                        url: 'bookList.html',  
                        id: 'bookList.html'  
                    });  
                });  
                //课件下载  
                document.getElementById("download").addEventListener('tap', function() {  
                    mui.openWindow({  
                        url: 'bookDownload.html',  
                        id: 'bookDownload.html'  
                    });  
                });  
            });  
            mui('#detail').on('tap', 'li', function() {  
                var sd_path = plus.io.convertLocalFileSystemURL("_downloads/H556CDA0F_0325074000.apk");  
                var dataid = this.getAttribute("data-id");  
                mui.openWindow({  
                    url: "dianduBook.html",  
                    id: "dianduBook.html",  
                    extras: {  
                        dataid: dataid  
                    }  
                });  
            });  

            function load_success(data) {  
                document.getElementById('detail').innerHTML = data;  
            }  
            //特殊:添加事件接收登录页面成功后发来的消息  
            window.addEventListener('download', function() {  
                var books = plus.storage.getItem("id");  
                var div = "<li class='aui-list-view-cell aui-img aui-col-xs-4' data-id='" + books + "'><img class='aui-img-object' src='../../images/grade2-1.png'><div class='aui-img-body'>英语五年级上(沪教版)</div></li>";  
                var d = document.getElementById("detail").innerHTML;  
                document.getElementById("detail").innerHTML = d + div;  
                var url = "http://120.25.87.223:8080/books/7.zip";  
                var dtask = plus.downloader.createDownload(url, {}, function(d, status) {  
                    // 下载完成  
                    if (status == 200) {  
                        console.log("Download success: " + d.filename);  
                        plus.zip.decompress(d.filename, "_download/books/",  
                            function() {  
                                alert("Decompress success!");  
                            },  
                            function(error) {  
                                alert("Compress error!" + error);  
                            });  
                        db.transaction(function(context) {  
                            context.executeSql('inert into book(id,name,imgurl) values("7","英语五年级上(沪教版)","grade2-1.png")');  
                        });  
                    } else {  
                        alert("Download failed: " + status);  
                    }  
                });  
                dtask.addEventListener("statechanged", onStateChanged, false);  
                dtask.start();  
            }, false);  

            function onStateChanged(task, status) {  
                switch (task.state) {  
                    case 1: // 开始  
                        console.log("开始下载...");  
                        break;  
                    case 2: // 已连接到服务器  
                        console.log("链接到服务器...");  
                        break;  
                    case 3: // 已接收到数据  
                        console.log(task.downloadedSize + "/" + task.totalSize);  
                        break;  
                    case 4: // 下载完成  
                        console.log("下载完成!");  
                        console.log(task.totalSize);  
                        break;  
                }  
            }  
        </script>  

    </body>  

</html>
  • Android_磊子

    我使用vivo手机HBuilder真机调试没有出现此问题呢,还请尝试下其他手机,或是手机重启下试试。

    2016-04-27 15:16

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