【发布时间】:2016-01-28 20:13:52
【问题描述】:
我想弄清楚如何用 C# 将此文件上传到我的 ftp 服务器。当它在ftpwebrequest 上调用getResponse() 时,它会抛出一个错误,上面写着“550 - 拒绝访问”。我不知道为什么。我可以使用相同的凭据通过 Filezilla 连接到服务器。
这是我的连接代码:
private void UploadFileToFTP(HttpPostedFile file, string server, string user, string pass)
{
string uploadUrl = server + file.FileName;
string uploadFileName = Path.GetFileName(file.FileName);
Stream streamObj = file.InputStream;
Byte[] buffer = new Byte[file.ContentLength];
streamObj.Read(buffer, 0, buffer.Length);
streamObj.Close();
streamObj = null;
try
{
SetMethodRequiresCWD();
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(uploadUrl);
//ftp.Method = WebRequestMethods.Ftp.MakeDirectory;
ftp.Method = WebRequestMethods.Ftp.UploadFile;
ftp.UsePassive = true;
ftp.Credentials = new NetworkCredential(user, pass);
FtpWebResponse CreateForderResponse = (FtpWebResponse)ftp.GetResponse();
if (CreateForderResponse.StatusCode == FtpStatusCode.PathnameCreated)
{
string ftpUrl = string.Format("{0}/{1}", uploadUrl, uploadFileName);
FtpWebRequest requestObj = FtpWebRequest.Create(ftpUrl) as FtpWebRequest;
requestObj.KeepAlive = true;
requestObj.UseBinary = true;
requestObj.Method = WebRequestMethods.Ftp.UploadFile;
requestObj.Credentials = new NetworkCredential(user, pass);
Stream requestStream = requestObj.GetRequestStream();
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Flush();
requestStream.Close();
requestObj = null;
}
}
catch (WebException e)
{
String status = ((FtpWebResponse)e.Response).StatusDescription;
}
}
【问题讨论】:
-
当您通过 file-zilla 连接到同一个 ftp 站点时,您实际上是否使用 file-zilla 成功上传
-
是的,filezilla 可以正常上传和下载
-
尝试在这里使用
WebClientstackoverflow.com/questions/15268760/… -
我可以用 httppostedfile 做到这一点吗?我没有 httppostedfile 的文件路径。
-
你有防火墙在某处运行吗?