编程入门教程:aardio批量上传文件并显示进度条

Admin Admin
发布:2017-10-09 20:58:09 分类:群聊整理
以下为群友 福建-咖啡 的投稿:
import win.ui; 
import thread.command;
import thread.manage;
import fsys.dlg;
/*DSG{{*/
mainForm = win.form(text="ftp上传测试";right=759;bottom=469)
mainForm.add(
btnSwitch={cls="button";text="开始";left=656;top=24;right=736;bottom=128;disabled=1;dr=1;dt=1;font=LOGFONT(name='思源黑体 Normal';h=-19;weight=350);z=7};
btnUpload={cls="button";text="选择文件";left=552;top=24;right=648;bottom=128;dr=1;dt=1;font=LOGFONT(name='思源黑体 Normal';h=-19;weight=350);z=2};
strProgress={cls="static";left=456;top=96;right=544;bottom=127;dr=1;dt=1;font=LOGFONT(h=-16);transparent=1;z=6};
txtLocalFile={cls="static";text="本地文件:";left=24;top=32;right=528;bottom=56;aw=1;dl=1;dt=1;transparent=1;z=3};
txtRemoteFile={cls="static";text="远程文件:";left=24;top=64;right=528;bottom=88;aw=1;dl=1;dt=1;transparent=1;z=5};
uploadList={cls="listview";left=24;top=144;right=736;bottom=448;ah=1;asel=false;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;font=LOGFONT(name='Source Sans Pro Semibold';h=-16;weight=600);fullRow=1;gridLines=1;msel=false;z=4};
uploadProgress={cls="progress";left=24;top=96;right=440;bottom=126;aw=1;dl=1;dr=1;dt=1;edge=1;max=100;min=0;z=1}
)
/*}}*/
/*
本范例ftp上传部分借鉴了@Else老兄的代码,原有只提供了控制台中输出上传进度的功能,
我对相关功能进行了修改,增加了winform界面的static控件及progress控件的功能,也通过编写这个
程序,也初步掌握了工作线程与界面线程的基础知识和线程消息的有关操作。寻遍了多个aardio网站及
论坛也没找到FTP上传显示进度的源码,特与大家一同分享,代码拙劣,请各位多多指点。
———— CriSLyx 20171009
*/
threadUpload=function(host,username,password,uploadList){
import inet.ftp;
import thread.command;
import fsys.dlg;
import fsys.file;
import fsys;
ftpConn=inet.ftp(host,username,password); //创建FTP连接
min,fileCount=table.range(uploadList); //获取uploadList计数,用table.count有时会不准
for(i=1;fileCount;1){
var localFile=uploadList[i][3];
var remoteFile=uploadList[i][4];
var fid=tonumber(uploadList[i][1]);
thread.command.uploadStatus(fid,"开始上传"); //使用thread.command向主线程传递消息
var localFileHandle = io.open(localFile,"rb"); //打开本地文件
var remoteFileHandle = ftpConn.open("/"++remoteFile,"wb"); //打开FTP远端文件
thread.command.localFile(localFile); //使用thread.command向主线程传递消息
thread.command.remoteFile(remoteFile); //使用thread.command向主线程传递消息
var buffer = raw.malloc(1000);//按照1000字节分块上传
var uploadSum =0;
var localSize=tonumber(localFileHandle.size64()); //获取本地文件大小
jindu=0;
while(var size; size = localFileHandle.readBuffer(buffer);size) //按照buffer大小循环读取文件同时上传
{
remoteFileHandle.writeBuffer(buffer,size);
uploadSum = uploadSum +tonumber(fsys.formatSize(size));
var uploadPercent = string.format("%.2f",uploadSum/localSize*100);
thread.command.setProgress(uploadPercent) //使用thread.command向主线程传递消息,设置进度条进度
}
thread.command.uploadStatus(fid,"上传成功");
localFileHandle.close();
remoteFileHandle.close();
}
}
mainFormInitial=function(){
mainForm.uploadList.insertColumn("序号",50,,0x2/*_LVCFMT_CENTER*/);
mainForm.uploadList.insertColumn("状态",120,,0x2/*_LVCFMT_CENTER*/);
mainForm.uploadList.insertColumn("本地文件",300,,0x2/*_LVCFMT_CENTER*/);
mainForm.uploadList.insertColumn("远程文件",300,,0x2/*_LVCFMT_CENTER*/);
}
mainForm.btnUpload.oncommand = function(id,event){
mainForm.uploadList.items={};
uploadFileList=fsys.dlg.openEx("所有文件|*.*");
for(fid,filePath in uploadFileList){
mainForm.uploadList.addItem({fid;"等待";filePath;fsys.getFileName(filePath)});
}
mgr=thread.manage(1); //创建线程管理器
mgr.create(threadUpload,"192.168.1.1","9999","636363",mainForm.uploadList.items).onEnd = function(...){
mainForm.msgbox("上传完成!"); //创建线程并设置回调
mainForm.btnSwitch.text="开始"
mainForm.btnSwitch.disabled=true;
}
mgr.suspend(); //创建后先行暂停 点击开始后 线程再继续执行。
mainForm.btnSwitch.disabled=false;
mgr.waitClose() //等待线程关闭
}
mainForm.btnSwitch.oncommand = function(id,event){
//mainForm.msgbox( mainForm.btnSwitch.text );
if(mainForm.btnSwitch.text="开始"){
mgr.resume(); //继续执行线程
mainForm.btnSwitch.text="暂停"
}else{
mgr.suspend(); //继续执行线程
mainForm.btnSwitch.text="开始"
}

}

var listener = thread.command(); //设置监听操作,接受线程消息
listener.localFile = function( strLocalFile ){
mainForm.txtLocalFile.text="本地文件:" ++ strLocalFile
}
listener.remoteFile = function( strRemoteFile ){
mainForm.txtRemoteFile.text="远程文件:" ++ strRemoteFile
}
listener.setProgress = function( pos ){
mainForm.uploadProgress.pos=pos;
mainForm.strProgress.text=pos++"%";
}
listener.uploadStatus=function(fid,strStatus){
mainForm.uploadList.setItemText(strStatus,fid,2);
mainForm.uploadList.ensureVisible(fid);
}
mainFormInitial();
mainForm.enableDpiScaling();
mainForm.show();

win.loopMessage();
图片名称

感谢投稿.
  • 青竹 青竹    
    Time:2019-02-15 14:20:38
    看来我还是得需要aardio的一些基础教程啊
[ 发单/接单 ]
换IP投票软件
PC蛋蛋自动挂机投注
新浪微博发微博显示尾巴的方法,比如显示来自iphone 7
百度文库批量自动上传软件
一点资讯app刷阅读量/评论/收藏/订阅功能/手机号注册
定做一个阿迪达斯官网注册器(需要破点击文字式验证码)
定制人人网自动注册/修改资料/采集/私聊软件
酷狗繁星直播网页协yi
YY多功能刷订阅刷粉丝
滑块验证码本地识别
狼人杀POST QQ登录注册 获取金币数量
做个贴吧发发帖的软件懂的来
今日头条账号保存cookie
抖音粉丝软件定做,只要粉丝
百家号自媒体发文软件定制
哔哩哔哩播放量
读取TB某个商品上架时间和相关信息
网易博客软件定制
定制天涯论坛发帖软件
定制今日头条批量自动发私信软件
[ 站内搜索 ]
[ 最近热帖 ]
万能助手 -- 扩展库大全集 14253
用aardio创建web工程图文讲解(1) 13466
电脑编程入门自学:Fiddler https 抓包时提示创建根证书不成功问题彻底解决(https插件dll方式) 12234
aardio绘图演示 11878
通过chrome.dll中间件控制外部chrome浏览器 10778
我常用的aardio技巧 10192
《边学C语言边赚钱——简码编程入门教程》系列集合 9932
aardio使用http或whttp进行get/post请求时经常cookies失效怎么办?__电脑计算机编程入门教程自学 9676
[源码下载]简码视频加密解密播放工具个人版v1.0发布,永久免费开源的知识变现神器 8883
python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 8346
编程入门教程:aardio批量上传文件并显示进度条 8317
aardio调用nodejs的ws模块做一个简单的聊天通信示例 7516
电脑计算机编程入门教程自学:原生JavaScript判断字符是否为A-Za-z英文字母 7145
电脑计算机编程入门教程自学:腾讯tx或极验geetest滑块按住拖动完成拼图验证成功破解思路及源码 6924
乐玩插件AARDIO调用 6496
[ 近期热答 ]
电脑计算机编程入门教程自学:什么是buffer缓冲区? 1
aardio_代码编辑框书签管理器开源 1
aardio_怎么用ide库从代码编辑框中取出指定行的源码? 1
aardio_codepage代码页编码乱码暴力猜解工具 1
aardio内嵌echarts图表添加鼠标事件响应功能 2
aardio列表框listbox_模糊查找和精确查找 1
8亿QQ绑定手机泄露:通过腾讯QQ号查询QQ绑定的手机号码漏洞! 1
carl listviewex调用例子----------源码搬运工 2
Aardio内嵌Electron浏览框怎么正确添加启动参数? 1
Aardio取汉字的字节数或字符数 1
怎么实现mssql图片数据的读写 2
aardio_从49个数字里选六个和值为150的不重复的数字 1
在嵌入wps的时候,多了一个 透明的边框,这个怎么消除它 1
万能助手入门帮助教程:学会科学地管理工作文件 1
Aaardio开发内嵌Electron浏览框放服务器上无法下载组件的解决办法 1