西西软件下载最安全的下载网站、值得信赖的软件下载站!

首页编程开发C#.NET → C#编程FTP上传文件代码示例

C#编程FTP上传文件代码示例

相关软件相关文章发表评论 来源:西西整理时间:2013/4/2 11:27:50字体大小:A-A+

作者:西西点击:0次评论:0次标签: ftp

  • 类型:服务器区大小:34KB语言:中文 评分:5.0
  • 标签:
立即下载

我要把图片通过ftp上传到服务器固定的目录下面,存放图片的这个文件夹是会变的,所以在上传之前,得先判断目录下面有没有这个文件夹,要是没有就先新建一个文件夹,在把图片上传到这个文件夹里

上传的核心代码:

        /// <summary>

        /// FTP上传文件
        /// </summary>
        /// <param name="fileUpload">上传控件</param>
        /// <param name="ftPServerIP">上传文件服务器IP</param>
        /// <param name="ftpUserID">服务器用户名</param>
        /// <param name="ftpPassword">服务器密码</param>
        /// <returns></returns>
        public  string Upload(FileUpload fileUpload, string ftpServerIP, string ftpUserID, string ftpPassword)
        {
            string filename = fileUpload.FileName;
            string sRet = "上传成功!";
            FileInfo fileInf = new FileInfo(fileUpload.PostedFile.FileName);
            string uri = "ftp://" + ftpServerIP + "/" + filename;
            FtpWebRequest reqFTP;

            // 根据uri创建FtpWebRequest对象 
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

            // ftp用户名和密码
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

            // 默认为true,连接不会被关闭
            // 在一个命令之后被执行
            reqFTP.KeepAlive = false;

            // 指定执行什么命令
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

            // 指定数据传输类型
            reqFTP.UseBinary = true;
            reqFTP.UsePassive = false;

            // 上传文件时通知服务器文件的大小
            reqFTP.ContentLength = fileInf.Length;

            // 缓冲大小设置为2kb
            int buffLength = 2048;

            byte[] buff = new byte[buffLength];
            int contentLen;

            // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
            FileStream fs = fileInf.OpenRead();

            try
            {
                // 把上传的文件写入流
                Stream strm = reqFTP.GetRequestStream();

                // 每次读文件流的2kb
                contentLen = fs.Read(buff, 0, buffLength);

                // 流内容没有结束
                while (contentLen != 0)
                {
                    // 把内容从file stream 写入 upload stream
                    strm.Write(buff, 0, contentLen);

                    contentLen = fs.Read(buff, 0, buffLength);
                }

                // 关闭两个流
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                sRet = ex.Message;
            }
            return sRet;
        }


上面只是一个简单的上传,当然上传之前还需要对文件进行一些验证,例如文件格式或者文件的大小之类的。简单验证请参考上传图片之上传前判断文件格式与大小。

为了防止重名,可以使用全局唯一标示符GUID,生成一个随机序列,在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。当然重复的几率也并不为0,但是非常小了。

     /// <summary>

        /// 生成全局唯一标示符
        /// </summary>
        /// <returns></returns>
        public string strGUID()
        {
            string strguid = Guid.NewGuid().ToString();
            return strguid;
        }

调用这个方法,然后将返回的序列跟文件名拼接就可以有效的避免文件重名的情况了。当然也可以用系统当前时间来跟文件名进行拼接,这样或许你感觉更保险一些。具体用那种方法就见仁见智了。

    相关评论

    阅读本文后您有什么感想? 已有人给出评价!

    • 8 喜欢喜欢
    • 3 顶
    • 1 难过难过
    • 5 囧
    • 3 围观围观
    • 2 无聊无聊

    热门评论

    最新评论

    发表评论 查看所有评论(0)

    昵称:
    表情: 高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲
    字数: 0/500 (您的评论需要经过审核才能显示)