• C# WinForm 文件上传下载


    /// <summary>
            /// WebClient上传文件至服务器
            /// </summary>
            /// <param name="localFilePath">文件名,全路径格式</param>
            /// <param name="serverFolder">服务器文件夹路径</param>
            /// <param name="reName">是否需要修改文件名,这里默认是日期格式</param>
            /// <returns></returns>
            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;
            }
    

      

    /// <summary>
            /// 下载服务器文件至客户端
            /// </summary>
            /// <param name="uri">被下载的文件地址</param>
            /// <param name="savePath">另存放的目录</param>
            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
        {
            /// <summary>
            /// 每次下载的大小
            /// </summary>
            int DownloadSize { get; set; }
    
            /// <summary>
            /// 待下载的文件名,完全路径格式
            /// </summary>
            string FullFileName { get; set; }
    
            /// <summary>
            /// 文件总大小
            /// </summary>
            long FileSize { get; }
    
            /// <summary>
            /// 获取文件的数据流对象
            /// </summary>
            /// <returns></returns>
            byte[] GetBuffer();
        }
    
        /// <summary>
        /// 下载服务器方法类
        /// </summary>
        public class DownloadServices : IDownloadServices, IDisposable
        {
            /// <summary>
            /// 每次下载大小
            /// </summary>
            private const int PROGRESS_UNIT_SIZE = 1024;
            private FileStream FSServer = null;
            private BinaryReader BRServer = null;
    
            /// <summary>
            /// 构造函数中初始化对象
            /// </summary>
            public DownloadServices(string fullFileName)
            {
                this._FullFileName = fullFileName;
                // 初始化创建对象
                CreateFileStream();
            }
    
            /// <summary>
            ///  创建对象
            /// </summary>
            /// <returns></returns>
            private bool CreateFileStream()
            {
                try
                {
                    FSServer = new FileStream(FullFileName, FileMode.Open, FileAccess.Read);
                    BRServer = new BinaryReader(FSServer);
    
                    _FileSize = FSServer.Length;
                    return true;
                }
                catch { return false; }
            }
    
            /// <summary>
            /// 销毁对象
            /// </summary>
            private void CloseFileStream()
            {
                if (FSServer != null)
                {
                    FSServer.Close();
                }
                if (BRServer != null)
                {
                    BRServer.Close();
                }
            }
            #region IDownloadServices 成员
            private string _FullFileName = string.Empty;
            /// <summary>
            /// 文件名
            /// </summary>
            public string FullFileName
            {
                get
                {
                    return this._FullFileName;
                }
                set
                {
                    this._FullFileName = value;
                }
            }
    
            private long _FileSize;
            /// <summary>
            /// 文件总大小
            /// </summary>
            public long FileSize
            {
                get
                {
                    return _FileSize;
                }
            }
    
            private int _DownloadSize = 1024;
            /// <summary>
            /// 每次下载的大小
            /// </summary>
            public int DownloadSize
            {
                get
                {
                    return this._DownloadSize;
                }
                set
                {
                    this._DownloadSize = value;
                }
            }
    
            /// <summary>
            /// 获取文件流数据
            /// </summary>
            /// <returns></returns>
            public byte[] GetBuffer()
            {
                Byte[] buffer = BRServer.ReadBytes(PROGRESS_UNIT_SIZE);
                return buffer;
            }
            #endregion
    
            #region IDisposable 成员
            /// <summary>
            /// 销毁对象
            /// </summary>
            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);
            /// <summary>
            /// 上传前方法,参数为文件总大小
            /// </summary>
            public static event DownloadHandler BeforeDownload;
            /// <summary>
            /// 上传过程中方法,参数为当次上传文件大小
            /// </summary>
            public static event DownloadHandler DoDownload;
            /// <summary>
            /// 上传完成方法,参数为当次上传文件大小
            /// </summary>
            public static event DownloadHandler AfterDownload;
            /// <summary>
            /// 上传出错方法,参数为错误信息
            /// </summary>
            public static event DownloadHandler ErrorDownload;
    
            private FileStream fs = null;
            private BinaryWriter bw = null;
    
            private int _DownSize = 1024;
            /// <summary>
            /// 每次下载的数据大小(单位:字节),默认 1024 字节
            /// </summary>
            public int DownSize
            {
                get { return this._DownSize; }
                set { this._DownSize = value; }
            }
    
            /// <summary>
            /// 下载文件
            /// </summary>
            /// <param name="localFile">本地文件保存路径(完全路径格式)</param>
            /// <param name="fullFileName">服务器文件路径(完全路径格式)</param>
            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();
                }
            }
    
            /// <summary>
            /// 销毁对象
            /// </summary>
            private void CloseFileStream()
            {
                if (bw != null)
                {
                    bw.Close();
                }
                if (fs != null)
                {
                    fs.Close();
                }
    
                BeforeDownload = null;
                DoDownload = null;
                AfterDownload = null;
                ErrorDownload = null;
            }
    
            #region IDisposable 成员
            /// <summary>
            /// 释放对象
            /// </summary>
            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
        {
            /// <summary>
            /// 文件名(不含路径格式)
            /// </summary>
            string FileName { get; }
    
            /// <summary>
            /// 上载
            /// </summary>
            /// <param name="buffer"></param>
            /// <param name="isEnd"></param>
            void Upload(byte[] buffer, bool isEnd);
        }
    
        /// <summary>
        /// 服务器端方法
        /// </summary>
        public class UploadServices : IUploadServices,IDisposable
        {
            private FileStream FSServer = null;
            private static BinaryWriter BWServer = null;
    
            private string _FileName = string.Empty;
            /// <summary>
            /// 待上传的文件名,不包含路径
            /// </summary>
            public string FileName
            {
                get { return this._FileName; }
                set { this._FileName = value; }
            }
    
            /// <summary>
            /// 上传文件保存路径,完全路径格式
            /// </summary>
            private string ServerPath
            {
                get
                {
                    return Path.Combine("D:\\Test\\ProgressUpload", FileName);
                }
            }
    
            public UploadServices()
            {
    
            }
    
            public UploadServices(string fileName)
            {
                this._FileName = fileName;
                /// 初始化对象
                CreateFileStream();
            }
    
            /// <summary>
            ///  创建对象
            /// </summary>
            /// <returns></returns>
            private bool CreateFileStream()
            {
                try
                {
                    FSServer = new FileStream(ServerPath, FileMode.Create, FileAccess.Write);
                    BWServer = new BinaryWriter(FSServer);
                    return true;
                }
                catch { return false; }
            }
    
            /// <summary>
            /// 每次读取固定字节写入文件
            /// </summary>
            /// <param name="buffer"></param>
            /// <param name="isEnd"></param>
            public void Upload(byte[] buffer, bool isEnd)
            {
                BWServer.Write(buffer);
                BWServer.Flush();
            }
    
            /// <summary>
            /// 关闭对象
            /// </summary>
            private void CloseFileStream()
            {
                if (BWServer != null)
                {
                    BWServer.Close();
                    BWServer = null;
                }
                if (FSServer != null)
                {
                    FSServer.Close();
                    FSServer = null;
                }
            }
    
            #region IDisposable 成员
            /// <summary>
            /// 销毁对象
            /// </summary>
            public void Dispose()
            {
                CloseFileStream();
            }
            #endregion
        }
    }
    

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    namespace ProgressStudy
    {
        /// <summary>
        /// 客户端方法
        /// </summary>
        public class UploadCommon : IDisposable
        {
            public delegate void UploadHander(object sender);
            /// <summary>
            /// 上传前方法,参数为文件总大小
            /// </summary>
            public static event UploadHander BeforeUpLoad;
            /// <summary>
            /// 上传过程中方法,参数为当次上传文件大小
            /// </summary>
            public static event UploadHander DoUpLoad;
            /// <summary>
            /// 上传完成方法,参数为当次上传文件大小
            /// </summary>
            public static event UploadHander AfterUpLoad;
            /// <summary>
            /// 上传出错方法,参数为错误信息
            /// </summary>
            public static event UploadHander ErrorUpLoad;
    
            private FileStream fs = null;
            private BinaryReader br = null;
    
            private int _UploadSize = 1024;
            /// <summary>
            /// 每次上载的文件数据大小(单位:字节),默认 1024 字节
            /// </summary>
            public int UploadSize
            {
                get { return this._UploadSize; }
                set { this._UploadSize = value; }
            }
    
            /// <summary>
            /// 通过字节流上传,使用委托控制进度条
            /// </summary>
            /// <param name="localFile">本地路径</param>
            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();
                }
            }
    
            /// <summary>
            /// 销毁对象
            /// </summary>
            private void CloseFileStream()
            {
                if (br != null)
                {
                    br.Close();
                }
                if (fs != null)
                {
                    fs.Close();
                }
    
                BeforeUpLoad = null;
                DoUpLoad = null;
                AfterUpLoad = null;
                ErrorUpLoad = null;
            }
    
            #region IDisposable 成员
            /// <summary>
            /// 释放对象
            /// </summary>
            public void Dispose()
            {
                CloseFileStream();
            }
            #endregion
        }
    }
    

      

  • 相关阅读:
    npm ci命令比npm installer命令快2至10倍
    Liferay 7.1发布啦
    2016/07/05 zend optimizer
    2016/06/16 phpexcel
    2016/06/13 phpexcel 未完待续
    2016/06/10 日历插件 Datepicker
    2016/06/09 ThinkPHP3.2.3使用分页
    2016/06/02 网摘记录 svn 服务器端 客户端 安装使用
    2016/05/27 php上传文件常见问题总结
    2016/05/25 抽象类与API(接口)差别
  • 原文地址:https://www.cnblogs.com/laojiefang/p/2553156.html
Copyright © 2020-2023  润新知