FTPダウンロード進捗展示を実現
3931 ワード
機能説明:FTPサーバーに指定されたパスのフォルダが保存されており、フォルダ内のすべてのファイルをローカルにダウンロードする必要があり、フロントインタフェースはファイルのダウンロードの進捗状況とダウンロードが完了した後にインタフェースに通知する必要がある.
難点:FTPはファイルのサイズをクエリーする方法を提供しますが、フォルダのサイズをクエリーする方法は提供されません.△フォルダのサイズを調べる方法を知っている人がいたら、教えてください.ありがとうございます.
解決策:ダウンロードの進捗状況は、ダウンロード済み/フォルダ全体のサイズの方法で表示されず、ダウンロード済みファイルの数/フォルダ内のファイル全体の数の方法で表示されます.
コード:
FTPフォルダのファイルをダウンロードするスレッドを再開
FTP上でフォルダの中のファイルをダウンロードします
フロントJavaScriptコードは、ダウンロードの進捗が0.95未満の場合はダウンロードの進捗を取得し続け、0.95以上の場合はダウンロードが完了したとみなされます
バックグラウンドでローカルフォルダにアクセスし、ローカルファイル内の現在のファイルの数を取得し、ローカルファイルの数/httpサーバ上のファイルの数で現在のダウンロードの進捗状況を取得します.
難点:FTPはファイルのサイズをクエリーする方法を提供しますが、フォルダのサイズをクエリーする方法は提供されません.△フォルダのサイズを調べる方法を知っている人がいたら、教えてください.ありがとうございます.
解決策:ダウンロードの進捗状況は、ダウンロード済み/フォルダ全体のサイズの方法で表示されず、ダウンロード済みファイルの数/フォルダ内のファイル全体の数の方法で表示されます.
コード:
FTPフォルダのファイルをダウンロードするスレッドを再開
Task.Factory.StartNew(() => { ftp.DownFtpDir("ftp://" + ftpip + "/" + caseresult.ModelGUID + "/" + caseresult.CaseName + "/" + caseresult.DRAW_TYPE + "_" + caseresult.DataType + "/" + username + "/", dir); });
FTP上でフォルダの中のファイルをダウンロードします
///
/// FTP
///
/// FTP
///
public void DownFtpDir(string ftpDir, string saveDir)
{
bool start = true;
while (start)
{
try
{
List 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('
');
ImagesAnimate(imagesArray, casename, modelguid);
}
});
}
}
});
}
バックグラウンドでローカルフォルダにアクセスし、ローカルファイル内の現在のファイルの数を取得し、ローカルファイルの数/httpサーバ上のファイルの数で現在のダウンロードの進捗状況を取得します.
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());
}