七牛 大文件上传

大文件报错:invalid multipart format: multipart: message too large

UploadManager->put 改为 UploadManager->putFile


原生与WebView传递超大文件

方法一

原生实现 分块读取接口,由JS去调用,读取本地文件。

方法二

将大文件转成特定格式如base64,以对象形式存储生成JS文件,动态加载JS文件,调用相应接口,获取base64数据。

js文件如下

function load(){
    var ob = new Object(); /** 这里内部会创建一个Handle<JSOBJECT>的对象 是一个地址 */
    ob.data="亿万数据"; /** 由于是内存地址所以可以存储小于当前内存的一块空间,理论上无限大 */
    return ob; /** 返回这一个对象 */
}

原生可以将文件base64写入到手机,然后webview的JS通过动态加载JS获取load函数,从而调用load函数实现得到大文件的数据。

调用方法(jQuery)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <button style="width:100px;height:30px;" onclick="getJs()">获取</button>
    <script>
        function getJs(){
            $.getScript("hotLoad.js",(e)=>{
                console.log(load());
            });
        };
    </script>
</body>
</html>

由于getScript是Ajax实现的,所以注意跨域问题。使用其他方式实现JS的加载也可。

HBuilder 免安装调试方法探究

关于HBuilder基座的分析可以看:https://www.iwonmo.com/archives/1414.html

本质上是一个webview,而每次保存adb都会push到私有目录下的www目录,然后进行重运行。

命令行如下:

parent_pid:612
cmdline:'c:\users\wonmo\desktop\hbuilderx.1.8.1.20190330.full\hbuilderx\plugins\launcher\tools\adbs\adb.exe -s 022TDM1481004885 push C:\Users\wonmo\Documents\HBuilderProjects\d\unpackage\dist\dev\app-plus/. /sdcard/Android/data/io.dcloud.HBuilder/apps/HBuilder/www/'
image_base:0x0000000000400000
image_size:0x00113000

这种方式每次都要把vue编译后的文件上传到www。在想有没有更简便的方式,结合前段时间分析微信的开发者工具https://www.iwonmo.com/archives/1539.html尝试了一种方法。

流程:

屏幕快照 2019-03-31 上午11.43.44.png


编辑器搭建http环境,手机收到广播,判断广播类型,webview重新加载http地址。

实现:

发送

屏幕快照 2019-03-31 上午11.26.03.png

接收

屏幕快照 2019-03-31 上午11.26.20.png