c#winform+ftp上传文件的问题

nijat_910 2015-05-12 02:05:19
因公司要求,整理公司资源,把现有的资源上传的一个电脑上(在一个同事的电脑上腾出了空间,把所有的资源上传的此电脑上),我在这个电脑上装了SQL2008+serv_u+IIS7,我用的是c# winform+webservice,数据库操作通过webservice进行,上传文件用ftp批量上传,上传整个文件夹,一下是文件夹目录



文件夹总大小100MB以上,有时候单独一个文件也有10-100mb左右,

一下是ftp上传代码



public void Upload(string filename,string foldername)
{

try
{
FileInfo fileInf = new FileInfo(filename);

string uri = "ftp://" + ftpServerIP + "/" + foldername + "/" + fileInf.Name;

Connect(uri);//连接

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

// 指定执行什么命令

reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

// 上传文件时通知服务器文件的大小

reqFTP.ContentLength = fileInf.Length;

// 缓冲大小设置为kb

int buffLength = 2048;

byte[] buff = new byte[buffLength];

int contentLen;

// 打开一个文件流(System.IO.FileStream) 去读上传的文件

FileStream fs = fileInf.OpenRead();

try
{

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

// 每次读文件流的kb
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)
{
MessageBox.Show(ex.Message, "Upload Error");

}
}
catch
{ }
}



可以通过遍历批量上传文件,但是上传速度很慢,很慢。上传一个文件夹都要花上半天,我想问有没有办法提高上传速度,或者要用别的上传方法。(用别的方法也可以,因为ftp上传我第一次接触,不太熟悉)请各位给个意见,小弟感激不尽!还有上传的时候要加上进度条。请各位大侠高手们帮忙。
...全文
829 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
道玄希言 2015-05-23
  • 打赏
  • 举报
回复
同意三楼的, 既然服务端已经用了 Serv-U 来搭建, 那客户端,也没必要自己写个上传的了。 我们也不必纠结在哪里限速啊, 还是服务断设置错误或者自己写的客户端上传的问题, 先直接安装个FTP客户端来测试下, 就知道是服务端的问题,还是自己写的客户端的问题了。
nijat_910 2015-05-23
  • 打赏
  • 举报
回复
引用 9 楼 sgyiliya 的回复:


private void Form1_Load(object sender, EventArgs e)
        {
            ftpServerIP = "192.168.239.83";
            ftpUserID = "ftptest";
            ftpPassword = "test";
        }

        private void btnUpload_Click(object sender, EventArgs e)
        {
            OpenFileDialog opFilDlg = new OpenFileDialog();
            if (opFilDlg.ShowDialog() == DialogResult.OK)
            {
                Upload(opFilDlg.FileName);
            }
        }

     

        private void Upload(string filename)
        {
            FileInfo fileInf = new FileInfo(filename);
            string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
            FtpWebRequest reqFTP;
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            reqFTP.KeepAlive = false;
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            reqFTP.UseBinary = true;
            reqFTP.ContentLength = fileInf.Length;
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            FileStream fs = fileInf.OpenRead();
            try
            {
                Stream strm = reqFTP.GetRequestStream();
                contentLen = fs.Read(buff, 0, buffLength);
                while (contentLen != 0)
                {
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "上传出错");
                return;
            }
            MessageBox.Show("上传成功!");
        }



参考以上代码。
我的方法也跟你的差不多,但是速度就是慢。这到底是什么问题,无线网的问题还是路由器问题,还是ftp服务器问题,还是我偶的代码问题?! 真搞不明白!闷闷闷闷!
binsweet 2015-05-14
  • 打赏
  • 举报
回复
如果不长期用,费那么大劲干啥,直接共享磁盘拷贝
sgyiliya 2015-05-14
  • 打赏
  • 举报
回复


private void Form1_Load(object sender, EventArgs e)
        {
            ftpServerIP = "192.168.239.83";
            ftpUserID = "ftptest";
            ftpPassword = "test";
        }

        private void btnUpload_Click(object sender, EventArgs e)
        {
            OpenFileDialog opFilDlg = new OpenFileDialog();
            if (opFilDlg.ShowDialog() == DialogResult.OK)
            {
                Upload(opFilDlg.FileName);
            }
        }

     

        private void Upload(string filename)
        {
            FileInfo fileInf = new FileInfo(filename);
            string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
            FtpWebRequest reqFTP;
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            reqFTP.KeepAlive = false;
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            reqFTP.UseBinary = true;
            reqFTP.ContentLength = fileInf.Length;
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            FileStream fs = fileInf.OpenRead();
            try
            {
                Stream strm = reqFTP.GetRequestStream();
                contentLen = fs.Read(buff, 0, buffLength);
                while (contentLen != 0)
                {
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "上传出错");
                return;
            }
            MessageBox.Show("上传成功!");
        }



参考以上代码。
那城 2015-05-14
  • 打赏
  • 举报
回复
serv-u里面把ftp客户端的用户名和密码,以及通信端口设置好,然后自己写个客户端,速度很快
tcmakebest 2015-05-14
  • 打赏
  • 举报
回复
引用 6 楼 nijat_910 的回复:
[quote=引用 5 楼 tcmakebest 的回复:] 如果是在局域网上传慢,就不是程序的问题了,注意不要用无线网络,还得看看FTP服务器是否限制了速度.
怎么设置FTP速度?serv-u里面怎么设置,找不到限速的地方了。[/quote] 我用的不是这种FTP服务器,所以你用的那种如何设置我不清楚,但默认情况都不会限速的.
tcmakebest 2015-05-13
  • 打赏
  • 举报
回复
如果是在局域网上传慢,就不是程序的问题了,注意不要用无线网络,还得看看FTP服务器是否限制了速度.
nijat_910 2015-05-13
  • 打赏
  • 举报
回复
引用 5 楼 tcmakebest 的回复:
如果是在局域网上传慢,就不是程序的问题了,注意不要用无线网络,还得看看FTP服务器是否限制了速度.
怎么设置FTP速度?serv-u里面怎么设置,找不到限速的地方了。
csdnFUCKINGSUCKS 2015-05-12
  • 打赏
  • 举报
回复
既然你已经搭建了一个ftp server 那就在客户端装一个ftp client 连接之后传上去不就行了 为什么还要自己去实现上传这个过程
nijat_910 2015-05-12
  • 打赏
  • 举报
回复
没人回答吗?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
nijat_910 2015-05-12
  • 打赏
  • 举报
回复
难道就没人回答吗!~?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧