WinFrom通过WebClient上传下载文件(带进度条)


(2009-09-27 12:18:09)

<script> var $tag='it'; var $tag_code='eb65fb21463843ec4e092ddd6192fd7f'; var $r_quote_bligid='4d17d8ec0100f0ls'; var $worldcup='0'; var $worldcupball='0'; </script>标签:

it

分类: 软件开发

以下程序在.NET2005,系统XP中测试通过:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.IO;

 

namespace TQSystem.Com

{

    class UpDownLoadFile

    {

 

        /// <summary>

        /// WebClient上传文件至服务器(不带进度条)

        /// </summary>

        /// <param name="fileNameFullPath">要上传的文件(全路径格式)</param>

        /// <param name="strUrlDirPath">Web服务器文件夹路径</param>

        /// <returns>True/False是否上传成功</returns>

        public bool UpLoadFile(string fileNameFullPath, string strUrlDirPath)

        {

            //得到要上传的文件文件名

            string fileName = fileNameFullPath.Substring(fileNameFullPath.LastIndexOf("\\") + 1);

            //新文件名由年月日时分秒及毫秒组成

            string NewFileName = DateTime.Now.ToString("yyyyMMddhhmmss")

                                        + DateTime.Now.Millisecond.ToString()

                                        + fileNameFullPath.Substring(fileNameFullPath.LastIndexOf("."));

            //得到文件扩展名

            string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);

            if (strUrlDirPath.EndsWith("/") == false) strUrlDirPath = strUrlDirPath + "/";

            //保存在服务器上时,将文件改名(示业务需要)

            strUrlDirPath = strUrlDirPath + NewFileName;

            // 创建WebClient实例

            WebClient myWebClient = new WebClient();

            myWebClient.Credentials = CredentialCache.DefaultCredentials;

            // 将要上传的文件打开读进文件流

            FileStream myFileStream = new FileStream(fileNameFullPath, FileMode.Open, FileAccess.Read);

            BinaryReader myBinaryReader = new BinaryReader(myFileStream);

            try

            {

                byte[] postArray = myBinaryReader.ReadBytes((int)myFileStream.Length);

                //打开远程Web地址,将文件流写入

                Stream postStream = myWebClient.OpenWrite(strUrlDirPath, "PUT");

                if (postStream.CanWrite)

                {

                    postStream.Write(postArray, 0, postArray.Length);

                }

                else

                {

                    //MessageBox.Show("Web服务器文件目前不可写入,请检查Web服务器目录权限设置!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

                }

                postStream.Close();//关闭流

                return true;

            }

            catch (Exception exp)

            {

                //MessageBox.Show("文件上传失败:" + exp.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

                return false;

            }

        }

 

        /// <summary>

        /// 下载服务器文件至客户端(不带进度条)

        /// </summary>

        /// <param name="strUrlFilePath">要下载的Web服务器上的文件地址(全路径 如:http://www.dzbsoft.com/test.rar)</param>

        /// <param name="Dir">下载到的目录(存放位置,机地机器文件夹)</param>

        /// <returns>True/False是否上传成功</returns>

        public bool DownLoadFile(string strUrlFilePath, string strLocalDirPath)

        {

            // 创建WebClient实例

            WebClient client = new WebClient();

            //被下载的文件名

            string fileName = strUrlFilePath.Substring(strUrlFilePath.LastIndexOf("/"));

            //另存为的绝对路径+文件名

            string Path = strLocalDirPath + fileName;

            try

            {

                WebRequest myWebRequest = WebRequest.Create(strUrlFilePath);

            }

            catch (Exception exp)

            {

                MessageBox.Show("文件下载失败:" + exp.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

            try

            {

                client.DownloadFile(strUrlFilePath, Path);

                return true;

            }

            catch (Exception exp)

            {

                MessageBox.Show("文件下载失败:" + exp.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

                return false;

            }

        }

 

 

        /// <summary>

        /// 下载带进度条代码(普通进度条)

        /// </summary>

        /// <param name="URL">网址</param>

        /// <param name="Filename">文件名</param>

        /// <param name="Prog">普通进度条ProgressBar</param>

        /// <returns>True/False是否下载成功</returns>

        public bool DownLoadFile(string URL, string Filename, ProgressBar Prog)

        {

            try

            {

                System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); //从URL地址得到一个WEB请求   

                System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); //从WEB请求得到WEB响应   

                long totalBytes = myrp.ContentLength; //从WEB响应得到总字节数   

                Prog.Maximum = (int)totalBytes; //从总字节数得到进度条的最大值   

                System.IO.Stream st = myrp.GetResponseStream(); //从WEB请求创建流(读)   

                System.IO.Stream so = new System.IO.FileStream(Filename, System.IO.FileMode.Create); //创建文件流(写)   

                long totalDownloadedByte = 0; //下载文件大小   

                byte[] by = new byte[1024];

                int osize = st.Read(by, 0, (int)by.Length); //读流   

                while (osize > 0)

                {

                    totalDownloadedByte = osize + totalDownloadedByte; //更新文件大小   

                    Application.DoEvents();

                    so.Write(by, 0, osize); //写流   

                    Prog.Value = (int)totalDownloadedByte; //更新进度条   

                    osize = st.Read(by, 0, (int)by.Length); //读流   

                }

                so.Close(); //关闭流

                st.Close(); //关闭流

                return true;

            }

            catch

            {

                return false;

            }

        }

 

 

        /// <summary>

        /// 下载带进度条代码(状态栏式进度条)

        /// </summary>

        /// <param name="URL">网址</param>

        /// <param name="Filename">文件名</param>

        /// <param name="Prog">状态栏式进度条ToolStripProgressBar</param>

        /// <returns>True/False是否下载成功</returns>

        public bool DownLoadFile(string URL, string Filename, ToolStripProgressBar Prog)

        {

            try

            {

                System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); //从URL地址得到一个WEB请求   

                System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); //从WEB请求得到WEB响应   

                long totalBytes = myrp.ContentLength; //从WEB响应得到总字节数   

                Prog.Maximum = (int)totalBytes; //从总字节数得到进度条的最大值   

                System.IO.Stream st = myrp.GetResponseStream(); //从WEB请求创建流(读)   

                System.IO.Stream so = new System.IO.FileStream(Filename, System.IO.FileMode.Create); //创建文件流(写)   

                long totalDownloadedByte = 0; //下载文件大小   

                byte[] by = new byte[1024];

                int osize = st.Read(by, 0, (int)by.Length); //读流   

                while (osize > 0)

                {

                    totalDownloadedByte = osize + totalDownloadedByte; //更新文件大小   

                    Application.DoEvents();

                    so.Write(by, 0, osize); //写流   

                    Prog.Value = (int)totalDownloadedByte; //更新进度条   

                    osize = st.Read(by, 0, (int)by.Length); //读流   

                }

                so.Close(); //关闭流   

                st.Close(); //关闭流   

                return true;

            }

            catch

            {

                return false;

            }

 

        }

 

    }

}

WinFrom上传下载文件支持大文件 WinFrom通过WebClient上传下载文件,内含说明文档,代码中有进度条和无进度条。 立即下载

相关推荐

C#通过winform和http上传文件

C#通过winform和http上传文件C#通过winform和http上传文件C#通过winform和http上传文件C#通过winform和http上传文件C#通过winform和http上传文件

分享一个在 WinForm 桌面程序中使用进度条展示报表处理进度的例子,提升用户体验

在有些比较消耗时间的业务场景中,比如生成报表等,如果没有在操作的过程中向用户反馈操作进度,会让用户以为程序 "死" 掉了,用户体验非常不好。BackgroundWorker 类虽然是旧技术,但它在处理 WinForm 业务处理进度,提高用户体验上却是非常好用的,比直接用多线程方便很多,这可见,技术不分新旧,用在恰当的地方最重要。

yangshuquan的专栏 1330

winfrom程序向服务器上传文件

winfrom程序向服务器上传文件,winfrom程序向服务器上传文件

WebClient

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; namespace TQSystem.Com { class...

weixin_30439131的博客 134

C# WinForm下载上传文件显示进度条

c#winform下载上传文件显示进度条,很典型! VS2010文件打开

使用WebClient实现文件下载

使用WebClient实现文件下载,进度条反应下载进度。

Winform文件下载之WebClient

最近升级了公司内部使用的一个下载小工具,主要提升了下面几点: 1. 在一些分公司的局域网中,连接不上外网 2. 服务器上的文件更新后,下载到的还是更新前的文件 3. 没有下载进度提示 4. 不能终止下载 下面和大家分享一些心得。 鉴于各种复杂的网络环境,笔者决定采用不同的编程接口进行下载尝试,以增加程序的可用性。 这里仅介绍使用WebClient的方法。博文中主要介绍...

265

全国充电站分布数据

CnOpenData推出的充电站数据覆盖全国34个省份的3万条数据,包含充电站名称、省份名称、省份代码、商圈、经纬度等地理信息以及商业类型、评分、消费等衍生信息,能为城市规划、环境科学、市场分析、技术发展和社会经济研究等多个领域提供宝贵的数据支持。

Sunny9qx的博客 4025

WinFrom通过WebClient向Web服务器上传下载文件(带进度条)

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net;usingSystem.IO;namespaceTQSystem.Com{classUpDownLoadFile{...

abc11111118的博客 263

手把手教你用UNI-MOL进行分子性质预测:从3D构象到实战结果

本文提供了使用UNI-MOL进行分子性质预测的完整实战指南。通过详细的环境搭建、3D构象生成、模型加载与微调步骤,手把手教你构建端到端的预测流水线。文章重点解析了如何利用UNI-MOL的3D分子表示学习能力,超越传统2D方法,实现对溶解度、活性等性质的更精准预测,并探讨了结果解读与模型分析方法。

weixin_29164091的博客 116

Ghidra逆向分析实战:从安装JDK到解析STM32的bin文件(附SVD插件配置)

本文详细介绍了使用Ghidra进行STM32固件逆向分析的完整流程,从JDK安装配置到SVD插件的应用。通过实战案例展示如何解析bin文件、恢复符号信息以及利用SVD插件识别外设寄存器,帮助开发者高效完成嵌入式设备的逆向工程任务。

weixin_29309475的博客 644

【转】WinFrom通过WebClient向Web服务器上传下载文件(带进度条)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;using System.IO;namespace TQSystem.Com{    class UpDownLoadFile   

博构 948

超声波清洗机拆解实录:从电路板到换能器,一文看懂内部构造(附高清图)

本文详细拆解了超声波清洗机的内部构造,从电路板设计到换能器工作原理,揭示了其核心技术。通过高清图片和详细分析,展示了功率放大电路、高频变压器及压电换能器等关键部件,为电子爱好者和维修技术人员提供了实用的故障诊断和元件二次利用指南。

grape的博客 1183

WinFrom通过WebClient向Web服务器上传下载文件

以下程序在.NET2005,系统XP中测试通过: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; namespace TQSystem.Com { class UpDownLoadFile { /// <summary> /

luo的博客 313

从零到一构建一个智能爬虫 Agent 完整教程

本文将打造一个具备自主决策、动态解析、反反爬、持久化能力的智能爬虫 Agent

数据知道的博客 4793

【目标检测】基于yolov5的道路坑洼检测(附代码和数据集)

基于yolov5的道路坑洼检测(附代码和数据集)

学无止境、积少成多、厚积薄发 4620

C# WebClient上传下载时进度条显示

2、代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Ne

风口上的猪博客 1736

【短距离通信】【WiFi】精讲802.11n/ac/ax mpdu和ampdu最大长度

在 Wi-Fi 标准(802.11n、802.11ac 和 802.11ax)中,和是数据传输的核心概念。理解它们各自的作用以及不同标准下的最大长度限制,有助于深入了解 Wi-Fi 的性能优化机制。以下是对802.11n802.11ac和802.11ax中MPDU和A-MPDU最大长度的详细技术分析和对比。1. MPDU 和 A-MPDU 的基本概念MPDU 是经过 MAC 层处理后的数据单元,主要由MAC层数据帧和物理层的传输头部(PHY headers)组成。

风云说通信 1108

[C#]在WinForm下使用HttpWebRequest上传文件并显示进度

要实现WinForm下的文件上传,个人觉得采用FTP方法太麻烦,还得配置FTP服务器,要通过防火墙也是一个麻烦。本来打算采用WebClient方法,但是采用这个方法实现后,进度条很短时间后就达到最大值,要等待一段时间才能传送完毕,要是文件太大(我这里测试约100M),会出现错误。后来才知道,原来WebClient是在加载完整个文件到内存后才真正开始上传,怪不得会出现前面的问题了。不得已参考了很多文

而立大叔 6962

【JTAG】1149.6协议详解

JTAG1149.6协议是1149.1协议中Boundary-Scan结构的扩展,1149.1对交流耦合、差分或两者兼有的情况并没有得到充分的处理。该协议支持新的I/O测试结构。需要时变(AC)信号的高级I/O引脚允许测试它们之间的连接,这包括所有差分信号引脚或单端信号引脚,通过设计支持交流耦合。..................

xuhe0206的博客 4574

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

用C# Builder实现文件下载 (转)

用C# Builder实现文件下载 (转)[@more@]作者:徐长友一.概述:  本文通过一个实例向大家介绍用C#Builder进行Inte.NET通讯编程的一些基本知识。我们知道.Net类包含了请求/响应层、应用协议层...

ciya3282的博客 87

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

c# 文件下载 进度及速度

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using Microsoft.Win32;usin...

weixin_30363817的博客 686

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C#winform 实现从服务器下载

///         /// 下载服务器文件至客户端(不带进度条)         ///         /// 要下载的Web服务器上的文件地址(全路径 如:http://www.dzbsoft.com/test.rar)         /// 下载到的目录(存放位置,机地机器文件夹)         /// True/False是否上传成功         public

蝉音荷律 1219
上一篇: 关于图片保存问题
下一篇: C# WebClient上传下载时进度条显示,找了好久才找到的哦!
flyhighwl
博客等级 码龄15年 8粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值