求助,关于ftp上传,80分求助

alex_pang333 2008-04-07 10:03:02
我使用了一个网上公开的,在.net2.0中支持的FTP类: ftpwebRequest,关键代码如下:
FileInfo file = new FileInfo(filePath);
FileStream fs=file.Create();

FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://218.244.136.XXX/images/notice.gif"));
request.Credentials = new NetworkCredential("cn5XXXX", "m4l5XXXX");
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Timeout = 10000;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();//在这里异常发生了
textBox1.Text += response.WelcomeMessage;
textBox1.Text +="\n"+ response.StatusDescription;
Stream responseStream = response.GetResponseStream();

int readcout;
byte[] by = new byte[4096];
readcout = responseStream.Read(by, 0, 4096);
while (readcout > 0)
{
fs.Write(by, 0, 4096);
readcout = responseStream.Read(by, 0, 4096);
}
.................

然后异常的信息是:
SendPasswordCommand
331 Password required for cn5XXXX. //但是密码已经设定了

基础连接已经关闭: 接收时发生错误。
在 System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
在 System.Net.FtpWebRequest.RequestCallback(Object obj)
在 System.Net.CommandStream.Abort(Exception e)
在 System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
在 System.Net.FtpWebRequest.GetResponse()
在 WindowsApplication1.Form1.DownloadFtp(String filePath) 位置 F:\我的程序\Projects\CPractice\WindowsApplication1\Form1.cs:行号 447

然而用相同的程序,我换了一个ftp地址,能够正常的下载和上传,但是这个ftp地址的欢迎信息中没有中文,而发生异常的ftp服务器有中文欢迎词,所以我想是中文的原因,并且我用cuteFTP或者直接在windows中能够登陆上传下载其文件,但是在我的程序中始终是这个异常。
请问如何解决这个问题,只有八十分,希望高手能尽快的帮帮忙,前提是不能将服务器中的中文欢迎信息删除。
...全文
204 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsd123 2008-04-26
  • 打赏
  • 举报
回复
学习中
alex_pang333 2008-04-26
  • 打赏
  • 举报
回复
zhenlogo:
需要源码的话,可以把邮箱留下,我发给你源码
alex_pang333 2008-04-26
  • 打赏
  • 举报
回复
的确是中文信息的问题,我找了一个FTP客户端的源码,把它更新了一下,把验证登陆和传输部分重写了,现在运行起来没有问题
zhenlogo 2008-04-24
  • 打赏
  • 举报
回复
兄弟,我也碰到这个问题,2楼的方法是可以的,本机调试都没问题,可vs发布后,我拿到客户端运行下,发现上传不了。
于是我在本地测试上传到服务器上去,结果出现类似的出错信息,兄弟,你解决了吗?解决的话,告诉我下噢。
QQ :35516694 谢谢
ericzhangbo1982111 2008-04-08
  • 打赏
  • 举报
回复
mark...
alex_pang333 2008-04-08
  • 打赏
  • 举报
回复
viki117 : 在英文的欢迎词下是正常的,能够很好的完成上传下载等操作
viki117 2008-04-08
  • 打赏
  • 举报
回复
你的WelcomeMessage试下用数字或者字母看下是否正常,还有长度不要太长。。
先判断下是中文问题还是长度问题。。。
alex_pang333 2008-04-08
  • 打赏
  • 举报
回复
零号特工:
因为是在得到流的时候就产生了异常,不是能够得到流之后下载的中文乱码,所以我还没有办法对下载的文件进行编码;
所以请教怎么和什么时候进行编码呢?
alex_pang333 2008-04-08
  • 打赏
  • 举报
回复
石头:
这份代码在有中文欢迎词的情况下是不能够使用的,我用过,如果没有中文欢迎词,那么是可以的;
alex_pang333 2008-04-08
  • 打赏
  • 举报
回复
有没有人知道呢,在线等待
changjiangzhibin 2008-04-07
  • 打赏
  • 举报
回复
utf-8
itfutao 2008-04-07
  • 打赏
  • 举报
回复

using System.Net;
using System.IO;

private void Upload(string filename)
{
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP;

// 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));

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

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

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

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

// 上传文件时通知服务器文件的大小
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)
{
MessageBox.Show(ex.Message, "Upload Error");
}
}

以上代码确定能够使用..
alex_pang333 2008-04-07
  • 打赏
  • 举报
回复
希望能尽快的得到解决啊,谢谢,解决就给分。

110,536

社区成员

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

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

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