实现FTP下载进度展示
2017-09-14 10:07
211 查看
功能描述:FTP服务器上存有指定路径的文件夹,需要下载文件夹中的所有文件到本地,而且前台界面需要看到文件下载的进度和下载完成后需要通知界面。
问题难点:FTP提供查询某一个文件的大小的方法,但是不提供查询某一个文件夹大小的方法。(如有人知道如何查询文件夹大小的方法可以告知,谢谢!)
解决办法:下载进度不通过已下载/整个文件夹大小的方法展示,通过已下载文件数量/文件夹内整体文件数量的方法展示。
代码:
重新开线程,该线程用于下载FTP文件夹中的文件
Task.Factory.StartNew(() => { ftp.DownFtpDir("ftp://" + ftpip + "/" + caseresult.ModelGUID + "/" + caseresult.CaseName + "/" + caseresult.DRAW_TYPE + "_" + caseresult.DataType + "/" + username + "/", dir); });
FTP上下载文件夹中的文件
/// <summary>
/// 从FTP下载整个文件夹
/// </summary>
/// <param name="ftpDir">FTP文件夹路径</param>
/// <param name="saveDir">保存的本地文件夹路径</param>
public void DownFtpDir(string ftpDir, string saveDir)
{
bool start = true;
while (start)
{
try
{
List<FileStruct> files = ListFilesAndDirectories(ftpDir);
if (!Directory.Exists(saveDir))
{
Directory.CreateDirectory(saveDir);
}
foreach (FileStruct f in files)
{
if (f.IsDirectory) //文件夹,递归查询
{
DownFtpDir(ftpDir + "/" + f.Name, saveDir + "\\" + f.Name);
}
else //文件,直接下载
{
DownLoadFile(ftpDir + "/" + f.Name, saveDir + "\\" + f.Name);
}
}
start = false;
}
catch (Exception ex)
{
}
}
}
前台JavaScript代码,如果下载的进度小于0.95则继续获取下载的进度,大于0.95则认为下载已经完成
后台访问本地文件夹,获取本地文件内当前文件的数量,通过本地文件的数量/FTP服务器上的文件的数量获得当前下载的进度
问题难点:FTP提供查询某一个文件的大小的方法,但是不提供查询某一个文件夹大小的方法。(如有人知道如何查询文件夹大小的方法可以告知,谢谢!)
解决办法:下载进度不通过已下载/整个文件夹大小的方法展示,通过已下载文件数量/文件夹内整体文件数量的方法展示。
代码:
重新开线程,该线程用于下载FTP文件夹中的文件
Task.Factory.StartNew(() => { ftp.DownFtpDir("ftp://" + ftpip + "/" + caseresult.ModelGUID + "/" + caseresult.CaseName + "/" + caseresult.DRAW_TYPE + "_" + caseresult.DataType + "/" + username + "/", dir); });
FTP上下载文件夹中的文件
/// <summary>
/// 从FTP下载整个文件夹
/// </summary>
/// <param name="ftpDir">FTP文件夹路径</param>
/// <param name="saveDir">保存的本地文件夹路径</param>
public void DownFtpDir(string ftpDir, string saveDir)
{
bool start = true;
while (start)
{
try
{
List<FileStruct> files = ListFilesAndDirectories(ftpDir);
if (!Directory.Exists(saveDir))
{
Directory.CreateDirectory(saveDir);
}
foreach (FileStruct f in files)
{
if (f.IsDirectory) //文件夹,递归查询
{
DownFtpDir(ftpDir + "/" + f.Name, saveDir + "\\" + f.Name);
}
else //文件,直接下载
{
DownLoadFile(ftpDir + "/" + f.Name, saveDir + "\\" + f.Name);
}
}
start = false;
}
catch (Exception ex)
{
}
}
}
前台JavaScript代码,如果下载的进度小于0.95则继续获取下载的进度,大于0.95则认为下载已经完成
function getProcess(url, modelguid, casename, imagesArray) { $.ajax({ type: "GET", url: url, success: function (data) { if (data < 0.95) { //////////可能后台由于某个问题终止下载,data永远小于0.95,程序进入死循环,后期解决 alert(data); getProcess(url, modelguid, casename, imagesArray); } else { $.ajax({ type: "GET", url: 'WaterAnimateHandler.ashx?mode=GetImagesPath&DownLoaded=false&modelguid=' + modelguid + '&casename=' + casename + "&ParamName=" + results.options[cases.selectedIndex].value + "&dir=" + "", success: function (data) { ///////返回的数据 第一位:标识是否本地文件与服务器文件数量一致;第二位:本地文件地址;第三位。。最后图片名称 var imagesArray = new Array(); imagesArray = data.split('\n'); ImagesAnimate(imagesArray, casename, modelguid); } }); } } }); }
后台访问本地文件夹,获取本地文件内当前文件的数量,通过本地文件的数量/FTP服务器上的文件的数量获得当前下载的进度
public void GetDownLoadProcess(HttpContext context) { string path = context.Request.QueryString["dir"]; DirectoryInfo file = new DirectoryInfo(path); FileInfo[] filesCount = file.GetFiles(); double process = (double)filesCount.Count() / (double)imagescount; context.Response.Write(process.ToString()); }
相关文章推荐
- Android 实现应用下载并在通知栏展示进度通知 打开APK文件
- Android中FTP上传、下载的功能实现(含进度)
- Linux下使用Shell脚本实现ftp的自动上传下载的代码小结
- 使用Shell脚本实现ftp的自动上传下载
- Linux使用Shell脚本实现ftp的自动上传下载
- java实现FTP多线程断点续传,上传下载!
- Android中FTP上传、下载(含进度)
- Android实现文件下载进度显示功能
- Android文件下载进度条的实现
- Notification实现下载进度显示!
- ftp和http断点续传及下载的Delphi实现
- ftp 实现文件的上传下载以及列出文件列表Java代码
- 下面是一个使用FTPClient来实现的FTP上传和下载的功能
- ftp 实现文件的上传下载以及列出文件列表
- C#实现FTP上传下载功能
- 安卓自动更新,静默更新,替换友盟更新可以在通知栏里显示更新下载进度,几行代码快速实现Android下载更新
- 基于jQuery Bar Indicator 插件实现进度条展示效果
- 关于如何实现FTP上传或者下载带进度和速率的实现方法(转载)
- java实现ftp文件的上传与下载
- iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>