当前位置:  编程技术>.net/c#/asp.net

c# WinForm文件上传下载代码示例

    来源: 互联网  发布时间:2014-08-30

    本文导语:  c# winform 文件上传与下载的代码。 代码示例: /// /// WebClient上传文件至服务器 /// site http://www. /// /// 文件名,全路径格式 /// 服务器文件夹路径 /// 是否需要修改文件名,这里默认是日期格式 /// public static bool UploadFile(str...

c# winform 文件上传与下载的代码。

代码示例:

///
/// WebClient上传文件至服务器
/// site http://www.
///
/// 文件名,全路径格式
/// 服务器文件夹路径
/// 是否需要修改文件名,这里默认是日期格式
///
public static bool UploadFile(string localFilePath, string serverFolder,bool reName)
{
    string fileNameExt, newFileName, uriString;
    if (reName)
    {
fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf(".") + 1);
newFileName = DateTime.Now.ToString("yyMMddhhmmss") + fileNameExt;
    }
    else
    {
newFileName = localFilePath.Substring(localFilePath.LastIndexOf("\")+1);
    }

    if (!serverFolder.EndsWith("/") && !serverFolder.EndsWith("\"))
    {
serverFolder = serverFolder + "/";
    }

    uriString = serverFolder + newFileName;   //服务器保存路径
    /// 创建WebClient实例
    WebClient myWebClient = new WebClient();
    myWebClient.Credentials = CredentialCache.DefaultCredentials;

    // 要上传的文件
    FileStream fs = new FileStream(newFileName, FileMode.Open, FileAccess.Read);
    BinaryReader r = new BinaryReader(fs);
    try
    {
//使用UploadFile方法可以用下面的格式
//myWebClient.UploadFile(uriString,"PUT",localFilePath);
byte[] postArray = r.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(uriString, "PUT");
if (postStream.CanWrite)
{
    postStream.Write(postArray, 0, postArray.Length);
}
else
{
    MessageBox.Show("文件目前不可写!");
}
postStream.Close();
    }
    catch
    {
//MessageBox.Show("文件上传失败,请稍候重试~");
return false;
    }

    return true;
}

///
/// 下载服务器文件至客户端
///
/// 被下载的文件地址
/// 另存放的目录
public static bool Download(string uri, string savePath)
{
    string fileName;  //被下载的文件名
    if (uri.IndexOf("\") > -1)
    {
 fileName = uri.Substring(uri.LastIndexOf("\") + 1);
    }
    else
    {
 fileName = uri.Substring(uri.LastIndexOf("/") + 1); 
    }


    if (!savePath.EndsWith("/") && !savePath.EndsWith("\"))
    {
 savePath = savePath + "/";
    }

    savePath += fileName;   //另存为的绝对路径+文件名

    WebClient client = new WebClient();
    try
    {
 client.DownloadFile(uri, savePath);
    }
    catch
    {
 return false;
    }

    return true;
}

命名空间
System.Net;
System.IO;
上传IIS虚拟目录需要给写入权限,下载可能需要匿名访问权限。

文件流的方式:
 

代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ProgressStudy
{
    public interface IDownloadServices
    {
///
/// 每次下载的大小
///
int DownloadSize { get; set; }

///
/// 待下载的文件名,完全路径格式
///
string FullFileName { get; set; }

///
/// 文件总大小
///
long FileSize { get; }

///
/// 获取文件的数据流对象
///
///
byte[] GetBuffer();
    }

    ///
    /// 下载服务器方法类
    ///
    public class DownloadServices : IDownloadServices, IDisposable
    {
///
/// 每次下载大小
///
private const int PROGRESS_UNIT_SIZE = 1024;
private FileStream FSServer = null;
private BinaryReader BRServer = null;

///
/// 构造函数中初始化对象
///
public DownloadServices(string fullFileName)
{
    this._FullFileName = fullFileName;
    // 初始化创建对象
    CreateFileStream();
}

///
///  创建对象
///
///
private bool CreateFileStream()
{
    try
    {
FSServer = new FileStream(FullFileName, FileMode.Open, FileAccess.Read);
BRServer = new BinaryReader(FSServer);

_FileSize = FSServer.Length;
return true;
    }
    catch { return false; }
}

///
/// 销毁对象
///
private void CloseFileStream()
{
    if (FSServer != null)
    {
FSServer.Close();
    }
    if (BRServer != null)
    {
BRServer.Close();
    }
}
#region IDownloadServices 成员
private string _FullFileName = string.Empty;
///
/// 文件名
///
public string FullFileName
{
    get
    {
return this._FullFileName;
    }
    set
    {
this._FullFileName = value;
    }
}

private long _FileSize;
///
/// 文件总大小
///
public long FileSize
{
    get
    {
return _FileSize;
    }
}

private int _DownloadSize = 1024;
///
/// 每次下载的大小
///
public int DownloadSize
{
    get
    {
return this._DownloadSize;
    }
    set
    {
this._DownloadSize = value;
    }
}

///
/// 获取文件流数据
///
///
public byte[] GetBuffer()
{
    Byte[] buffer = BRServer.ReadBytes(PROGRESS_UNIT_SIZE);
    return buffer;
}
#endregion

#region IDisposable 成员
///
/// 销毁对象
///
public void Dispose()
{
    CloseFileStream();
}
#endregion
    }
}

代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ProgressStudy
{
    public class DownloadCommon : IDisposable
    {

public delegate void DownloadHandler(object sender);
///
/// 上传前方法,参数为文件总大小
///
public static event DownloadHandler BeforeDownload;
///
/// 上传过程中方法,参数为当次上传文件大小
///
public static event DownloadHandler DoDownload;
///
/// 上传完成方法,参数为当次上传文件大小
///
public static event DownloadHandler AfterDownload;
///
/// 上传出错方法,参数为错误信息
///
public static event DownloadHandler ErrorDownload;

private FileStream fs = null;
private BinaryWriter bw = null;

private int _DownSize = 1024;
///
/// 每次下载的数据大小(单位:字节),默认 1024 字节
///
public int DownSize
{
    get { return this._DownSize; }
    set { this._DownSize = value; }
}

///
/// 下载文件
///
/// 本地文件保存路径(完全路径格式)
/// 服务器文件路径(完全路径格式)
public void Download(string localFile, string fullFileName)
{
    DownloadServices down = new DownloadServices(fullFileName) { DownloadSize = DownSize };

    // 待下载的总文件大小
    long fileSize = down.FileSize;

    try
    {
// 读取本地文件到流对象中
fs = new FileStream(localFile, FileMode.OpenOrCreate, FileAccess.ReadWrite);
bw = new BinaryWriter(fs);

// 上传前调用方法
if (BeforeDownload != null)
{
    BeforeDownload(fileSize);
}
Byte[] buffer;
while ((buffer = down.GetBuffer()).Length > 0)
{
    bw.Write(buffer);
    bw.Flush();
    // 下载过程中
    if (DoDownload != null)
    {
DoDownload(buffer.Length);
    }
}
// 下载完毕
if (AfterDownload != null)
{
    AfterDownload(null);
}
    }
    catch (Exception ex)
    {
if (ErrorDownload != null)
{
    ErrorDownload(ex.Message);
}
    }
    finally
    {
down.Dispose();
Dispose();
    }
}

///
/// 销毁对象
///
private void CloseFileStream()
{
    if (bw != null)
    {
bw.Close();
    }
    if (fs != null)
    {
fs.Close();
    }

    BeforeDownload = null;
    DoDownload = null;
    AfterDownload = null;
    ErrorDownload = null;
}

#region IDisposable 成员
///
/// 释放对象
///
public void Dispose()
{
    CloseFileStream();
}
#endregion
    }
}

代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ProgressStudy
{
    public interface IUploadServices
    {
///
/// 文件名(不含路径格式)
///
string FileName { get; }

///
/// 上载
///
///
///
void Upload(byte[] buffer, bool isEnd);
    }

    ///
    /// 服务器端方法
    ///
    public class UploadServices : IUploadServices,IDisposable
    {
private FileStream FSServer = null;
private static BinaryWriter BWServer = null;

private string _FileName = string.Empty;
///
/// 待上传的文件名,不包含路径
///
public string FileName
{
    get { return this._FileName; }
    set { this._FileName = value; }
}

///
/// 上传文件保存路径,完全路径格式
///
private string ServerPath
{
    get
    {
return Path.Combine("D:\Test\ProgressUpload", FileName);
    }
}

public UploadServices()
{

}

public UploadServices(string fileName)
{
    this._FileName = fileName;
    /// 初始化对象
    CreateFileStream();
}

///
///  创建对象
///
///
private bool CreateFileStream()
{
    try
    {
FSServer = new FileStream(ServerPath, FileMode.Create, FileAccess.Write);
BWServer = new BinaryWriter(FSServer);
return true;
    }
    catch { return false; }
}

///
/// 每次读取固定字节写入文件
///
///
///
public void Upload(byte[] buffer, bool isEnd)
{
    BWServer.Write(buffer);
    BWServer.Flush();
}

///
/// 关闭对象
///
private void CloseFileStream()
{
    if (BWServer != null)
    {
BWServer.Close();
BWServer = null;
    }
    if (FSServer != null)
    {
FSServer.Close();
FSServer = null;
    }
}

#region IDisposable 成员
///
/// 销毁对象
///
public void Dispose()
{
    CloseFileStream();
}
#endregion
    }
}

 

代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ProgressStudy
{
    ///
    /// 客户端方法
    ///
    public class UploadCommon : IDisposable
    {
public delegate void UploadHander(object sender);
///
/// 上传前方法,参数为文件总大小
///
public static event UploadHander BeforeUpLoad;
///
/// 上传过程中方法,参数为当次上传文件大小
///
public static event UploadHander DoUpLoad;
///
/// 上传完成方法,参数为当次上传文件大小
///
public static event UploadHander AfterUpLoad;
///
/// 上传出错方法,参数为错误信息
///
public static event UploadHander ErrorUpLoad;

private FileStream fs = null;
private BinaryReader br = null;

private int _UploadSize = 1024;
///
/// 每次上载的文件数据大小(单位:字节),默认 1024 字节
///
public int UploadSize
{
    get { return this._UploadSize; }
    set { this._UploadSize = value; }
}

///
/// 通过字节流上传,使用委托控制进度条
///
/// 本地路径
public void UpLoadFile(string localFile)
{
    // 服务器端上传服务
    UploadServices upload = new UploadServices(Path.GetFileName(localFile));

    try
    {
fs = new FileStream(localFile, FileMode.Open, FileAccess.Read);
br = new BinaryReader(fs);

// 上传前调用方法
if (BeforeUpLoad != null)
{
    BeforeUpLoad(fs.Length);
}
while (true)
{
    Byte[] buffer = br.ReadBytes(UploadSize);
    if (buffer.Length < UploadSize)
    {
upload.Upload(buffer, true);
// 上传完毕使用方法
if (AfterUpLoad != null)
{
    AfterUpLoad(UploadSize);
}
break;
    }
    else
    {
upload.Upload(buffer, false);
if (DoUpLoad != null)
{
    DoUpLoad(UploadSize);
}
    }
}
    }
    catch (Exception ex)
    {
if (ErrorUpLoad != null)
{
    ErrorUpLoad(ex.Message);
}
    }
    finally
    {
Dispose();
upload.Dispose();
    }
}

///
/// 销毁对象
///
private void CloseFileStream()
{
    if (br != null)
    {
br.Close();
    }
    if (fs != null)
    {
fs.Close();
    }

    BeforeUpLoad = null;
    DoUpLoad = null;
    AfterUpLoad = null;
    ErrorUpLoad = null;
}

#region IDisposable 成员
///
/// 释放对象
///
public void Dispose()
{
    CloseFileStream();
}
#endregion
    }
}


    
 
 

您可能感兴趣的文章:

  • c#多线程更新窗口(winform)GUI的数据
  • C# WinForm中禁止改变窗口大小的方法
  • c# Winform 全窗口拖动的代码
  • 解读在C#中winform程序响应键盘事件的详解
  • c# winform 关闭窗体时同时结束线程实现思路
  • C# WinForm编程获取文件物理路径的方法
  • C# Winform 整个窗口拖动的实现代码
  • C# WinForm程序完全退出的问题解决
  • C# Winform 让整个窗口都可以拖动
  • 使用C# Winform应用程序获取网页源文件的解决方法
  • C# Winform 禁止用户调整ListView的列宽
  • C# winform编程中响应回车键的实现代码
  • C# WinForm窗体编程中处理数字的正确操作方法
  • C#中禁止Winform窗体关闭的实现方法
  • c# 天气预报查询(winform方法)的实现代码(图文)
  • C#实现WinForm捕获最小化事件的方法
  • c#实现DataGridView控件隔行变色(winform)的代码
  • C#中Winform窗体Form的关闭按钮变灰色的方法
  • C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法
  • C# winform treeview添加右键菜单并选中节点的方法
  • C#中使用IrisSkin2.dll美化WinForm程序界面的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • c#实现winform屏幕截图并保存的示例
  • winform拦截关闭按钮触发的事件示例
  • .Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用
  • WinForm相对路径的陷阱
  • Winform实现抓取web页面内容的方法
  • WinForm实现关闭按钮不可用或隐藏的方法
  • WinForm实现读取Resource中文件的方法
  • WinForm下 TextBox只允许输入数字的小例子
  • Winform跨线程操作的简单方法
  • WinForm实现移除控件某个事件的方法
  • WinForm DataGridView控件隔行变色的小例子
  • WinForm开发中屏蔽WebBrowser脚本错误提示的方法
  • WinForm窗体调用WCF服务窗体卡死问题
  • WinForm实现同时让两个窗体有激活效果的特效实例
  • WinForm子窗体访问父窗体控件的实现方法
  • c# Winform 操作INI配置文件的代码
  • 深入C# winform清除由GDI绘制出来的所有线条或图形的解决方法
  • C# WINFORM 强制让窗体获得焦点的方法代码
  • C# WinForm中Panel实现用鼠标操作滚动条的实例方法
  • C# Winform 调用系统接口操作 INI 配置文件的代码
  • WinForm特效之桌面上的遮罩层实现方法
  • 深入分析C#中WinForm控件之Dock顺序调整的详解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3