搜索
查看: 1523|回复: 0

miniblink后台线程上传大文件(可显示进度)

  [复制链接]

186

主题

2540

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13990
发表于 2019-3-16 16:52:28 | 显示全部楼层 |阅读模式
我们需要调用aardio来实现这个功能:
import win.ui;
/*DSG{{*/
var winform = win.form(text="miniblink后台线程上传大文件(可显示进度)";right=757;bottom=467)
/*}}*/

import web.blink.form;  
var wb = web.blink.form(winform);  

//创建后台线程上传文件
var uploadFileThread = function(winform,userAgent,files,fields,cookie){
   
import inet.http;
   
import web.multipartFormData;

   
var postSize,contentLength = 0;
   
var form = web.multipartFormData();
   
for(k,v in fields)form.add(k,v);
   
for(i=1;#files;1)form.addFile(i,files[ i ]);
   
   
//使用miniblink的userAgent,假装是miniblink客户端
    var http = inet.http(userAgent);
    http.disableCookies();
//禁用默认的cookie
    http.disableCache(); //强制刷新
    http.addHeaders ={
        cookie = cookie;
//添加浏览器的cookie
    }
   
    http.onSendBegin =
function(){
        contentLength = form.size();
        
return contentLength;
    }
    http.onSend =
function(remainSize){
        
var str = form.read(0x2000);
        io.print(
"上传了",#str)
        
if(!#str)return;
        postSize = postSize + #str;
        
        
//先将进度回调转发到界面线程(JS不支持多线程)
        winform.onUploadProgress( contentLength,postSize,remainSize-#str,..math.round(postSize / contentLength,2)*100 );
        
return str;
    }
   
var json = http.post("http://eu.httpbin.org/post",,{ ["Content-Type"] = form.contentType() }  );
   
import console
    console.dump(json)
   
//注意httpbin上传大文件以后返回的这个JSON文件相当大,所以可能需要下载很久
}

import fsys.dlg;
wb.external = {
   
    addFile =
function(){
        
var filePath  = fsys.dlg.open(,"选择要上传的文件");
        
return filePath;
    };
    uploadFile =
function(files,fields,callback){
        
import console
        console.open()
        
var winform = win.form().messageOnly();
        winform.onUploadProgress = wb.jsSaveCallback(callback);
        thread.invoke(uploadFileThread,winform,wb.script.navigator.userAgent
            ,web.json.strip(files),web.json.strip(fields),wb.cookie);
    };
}

wb.showDevTools()
wb.html =
/**
<!doctype html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <script>
    var uploadFiles = [];
    addFile = function(){
        var file  = external.addFile();
        if(file){
            uploadFiles.push(file);
            document.getElementById("upload-files").innerText = JSON.stringify(uploadFiles)
        }
    }
   
    </script>
</head>
<body>
   
    <a href='javascript:addFile()'>请点这里添加要上传的文件</a>
    <a href='javascript:external.uploadFile(
        uploadFiles,
        { userName : "姓名" },
        function(contentLength,postSize,remainSize,percent){
            document.write(percent+"<br>")
        })'>上传</a><div id="upload-files"></div>
   
</body>
</html>
**/


winform.show()
win.loopMessage()

参考:miniblink,拖拽上传文件示例
http://bbs.aardio.com/forum.php?mod=viewthread&tid=22374
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2019-5-23 22:54 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表