编程入门教程: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多功能刷订阅刷粉丝
滑块验证码本地识别
[ 站内搜索 ]
[ 最近热帖 ]
Aardio快速开发网站程序从入门到进阶系列教程集合 8372
万能助手 -- 扩展库大全集 7867
《边学C语言边赚钱——简码编程入门教程》系列集合 6501
我常用的aardio技巧 5866
[源码下载]简码视频加密解密播放工具个人版v1.0发布,永久免费开源的知识变现神器 5288
电脑编程入门自学:Fiddler https 抓包时提示创建根证书不成功问题彻底解决(https插件dll方式) 4999
自学编程?3秒钟完成你的第一个Aardio桌面程序! 3369
通过chrome.dll中间件控制外部chrome浏览器 2946
电脑计算机编程入门教程自学:腾讯tx或极验geetest滑块按住拖动完成拼图验证成功破解思路及源码 2633
aardio调用nodejs的ws模块做一个简单的聊天通信示例 2463
乐玩插件AARDIO调用 2242
用aardio创建web工程图文讲解(1) 2210
万能助手入门帮助教程:学会科学地管理工作文件 2025
Aardio文本编辑框控件edit_返回父窗口对象和改变父窗口对象 2016
简码编程官方群、地方群、分类群、联盟群大全! 1928
[ 近期热答 ]
aardio键值对快速查找地名对应的数字 4
web.blink.form 打开网站后,总是无响应或停止工作,大红包求解决。 1
请教,在tab中打开网页,第二次打开报错怎么解决 1
万能助手在win7 64位安装出现问题,怎么解决? 1
请问如果修改网页源代码中找不到的文本 2
arrdio怎么连接mysql,并进行相关数据库操作? 3
dll导入出错 1
编程入门教程:aardio批量上传文件并显示进度条 1
万能助手入门帮助教程:自定义用户名 1
kio,这么干会不会被封杀? 2
python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 1
万能助手入门帮助教程:拖拽调整节点位置[动图] 1
电脑计算机编程入门教程自学:使用百度地图API接口分页获取信息 1
【提问】万能助手界面怎么调节文字大小 2
头疼的小问题,关于助手 3