11

        /// <summary>
/// 文件上传
/// </summary>
/// <param name="filePath">原路径(绝对路径)包括文件名</param>
/// <param name="objPath">目标文件夹:服务器下的相对路径 不填为根目录</param>
public static bool FileUpLoad(string filePath, string objPath = "")
{
bool isOk = false;
string url = path;
if (objPath != "")
url += objPath + "/";
FtpWebRequest reqFTP = null;
ProgressBarForm progressBarForm = null;
try
{
FileInfo fileInfo = new FileInfo(filePath);
reqFTP = getFtpWebRequest(url, fileInfo.Name);
progressBarForm = new ProgressBarForm();
progressBarForm.Show();
using (FileStream fs = fileInfo.OpenRead())
using (Stream stream = reqFTP.GetRequestStream())
{
int buff = * ;
byte[] b = new byte[buff];
int count = ;
double total = Math.Ceiling(fs.Length / (float)buff);
int len;
while ((len = fs.Read(b, , b.Length)) > )
{
stream.Write(b, , len);
progressBarForm.LoadProgressBarRate(count++, (float)total);
}
} isOk = true;
}
catch (Exception ex)
{
Logger.Error(ex);
}
finally
{
if (progressBarForm != null)
progressBarForm.Close();
}
return isOk;
} private static FtpWebRequest getFtpWebRequest(string url, string fileInfoName)
{
string requestUri = url + fileInfoName;
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(requestUri));
reqFTP.Credentials = new NetworkCredential(username, password); //设置连接到FTP的帐号密码
reqFTP.KeepAlive = false; //设置请求完成后是否保持连接
reqFTP.Method = WebRequestMethods.Ftp.UploadFile; //指定执行命令
reqFTP.UseBinary = true; //指定数据传输类型
return reqFTP;
} public void Download(string remoteFile, string localFile)
{
ProgressBarForm progressBarForm = null;
try
{
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(path + "/" + remoteFile);
ftpRequest.Credentials = new NetworkCredential(username, password);
ftpRequest.UseBinary = true;
ftpRequest.UsePassive = true;
ftpRequest.KeepAlive = true;
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
ftpStream = ftpResponse.GetResponseStream(); long serverFileSize = GetFileSize(remoteFile);
FileStream localFileStream = new FileStream(localFile, FileMode.Create);
byte[] byteBuffer = new byte[bufferSize];
progressBarForm = new ProgressBarForm();
progressBarForm.Show();
int len;
while ((len = ftpStream.Read(byteBuffer, , byteBuffer.Length)) > )
{
localFileStream.Write(byteBuffer, , len);
var current = (localFileStream.Length * 1.0d / serverFileSize) * ;
progressBarForm.LoadProgressBarRate((int)current, );
}
localFileStream.Close();
ftpStream.Close();
ftpResponse.Close();
ftpRequest = null;
}
catch (Exception ex)
{
Logger.Error(ex);
Console.WriteLine(ex.ToString());
}
finally
{
if (progressBarForm != null)
progressBarForm.Close();
}
}

FTP 上传下载 进度条的更多相关文章

  1. jq 上传下载进度条

    里面只演示了下载的,挂载的是我的七牛服务器上的内容,上传事件和下载是一模一样的,为了大家不乱上传东西到我的服务器,而且我的服务器容量也不大,这里只展示了下载.代码: <!DOCTYPE html ...

  2. atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

    atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7 1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传 ...

  3. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  4. asp.net大文件上传与上传文件进度条问题

    利用Plupload解决大容量文件上传问题, 带进度条和背景遮罩层 关于Plupload结合上传插件jquery.plupload.queue的使用 这是群里面一位朋友给的资料. 下面是自己搜索到的一 ...

  5. windows系统下ftp上传下载和一些常用命令

    先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单, ...

  6. node实现http上传文件进度条 -我们到底能走多远系列(37)

    我们到底能走多远系列(37) 扯淡: 又到了一年一度的跳槽季,相信你一定准备好了,每每跳槽,总有好多的路让你选,我们的未来也正是这一个个选择机会组合起来的结果,所以尽可能的找出自己想要的是什么再做决定 ...

  7. Ajax上传文件进度条显示

    要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 html5提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后用这个百分比控制div框的显 ...

  8. windows下ftp上传下载和一些常用命令

    先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单, ...

  9. FTP上传下载工具(FlashFXP) v5.5.0 中文版

    软件名称: FTP上传下载工具(FlashFXP) 软件语言: 简体中文 授权方式: 免费试用 运行环境: Win 32位/64位 软件大小: 7.4MB 图片预览: 软件简介: FlashFXP 是 ...

随机推荐

  1. java is 和 == ,以及equal

    package string; public class MemAddrChange { public static void main(String[] args) { // const 常量区,

  2. 【网易官方】极客战记(codecombat)攻略-地牢-囚犯

    关卡连接: https://codecombat.163.com/play/level/the-prisoner 解放囚犯,你会得到盟友. 简介 敬请期待! 默认代码 # 释放囚犯,击败守卫并夺取宝石 ...

  3. IntelliJ IDEA 2017.3尚硅谷-----卸载

    直接在用户目录下搜索,卸载的干净就要删除 删除这两个目录,重启idea可以还原配置. editplus删除后重启也是这个效果

  4. SpringMVC--使用hibernate validator数据校验

    JSR 303 Spring3开始支持JSR 303 验证框架,JSR303是Java为Bean数据合法性校验所提供的标准框架.JSR 303 支持XML和注解风格的验证,通过在Bean属性上标注类似 ...

  5. django removing hardcoded URLs in template --- 使用变量,把url放在变量中 {% url 'namespace:name' %}

    urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^votes/', include("polls.urls", na ...

  6. HTML连载59-子绝父相

    一.子绝父相 1.只使用相对定位,对图片的位置进行精准定位. <!DOCTYPE html> <html lang="en"> <head> & ...

  7. itest(爱测试) 4.3.0 发布,开源BUG 跟踪管理 & 敏捷测试管理软件

    itest 简介:查看简介 test 开源敏捷测试管理,testOps 践行者.可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG)来组织测试工作,也有测试环境管理,还有很常用的测试度 ...

  8. BUUCTF-Web-Warm Up(CVE-2018-12613)

    题目(虽然是Warm up,但一点也不简单): 打开只有图片,源码里面提示了source.php 查看source.php: php代码里又提到了hint,去查看一下: 提示flag在如上图文件名里面 ...

  9. Apache Thrift Learning Notes

    简介 Apache Thrift软件框架(用于可扩展的跨语言服务开发)将软件堆栈与代码生成引擎结合在一起,以构建可在C ++,Java,Python,PHP,Ruby,Erlang,Perl,Hask ...

  10. Smart License

    思科启动了通过构建思科智能软件管理器门户来简化客户许可管理的计划. 它可以帮助客户了解他们购买的许可证以及他们使用的许可证. 其他各种思科产品已经启用Smart Enabled,随着此版本(我这里学习 ...