近期在处理FTP上传文件时遇到个550异常!
FTP是由他人提供的,我需要通过他提供的FTP上传文件!
异常现象:
1.我直接在FTP 创建文件夹时会出现一下异常提示: 
2.但是我利用c# 代码却可以在FTP服务器上创建文件路径!
3.我能直接将我的本地文件资料复制到服务器!
4.我利用自己的c#程序却不能上传到对方的服务器!

5.在遇到以上异常后我便在我自己的本机上搭建了一个FTP ,然而我直接上传到我自己的路径上却没一点问题,文件路径的创建、上传文件都毫无异常!
第一步想到的是对方的服务器是否 有什么限制 比如文件的上传权限之类或是有防火墙阻挡!
以上只是个人一个猜测,还望各位能提供意见!
代码如下:
文件上传:
#region 文件上上传
/// <summary>
/// 文件上上传
/// </summary>
/// <param name="fileinfo"></param>源文件路径
/// <param name="targetDir"></param>目标目录
/// <param name="hostname"></param> 主机名
/// <param name="username"></param> 用户名
/// <param name="password"></param> 密码
///
public void UploadFile(FileInfo fileinfo, string targetDir, string hostname, string username, string password)
{
//1. check target
string target;
if (targetDir.Trim() == "")
{
return;
}
target = Guid.NewGuid().ToString();
string URI =hostname + targetDir + target;
///WebClient webcl = new WebClient();
System.Net.FtpWebRequest ftp = GetRequest(URI, username, password);
//设置FTP命令
ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
ftp.UseBinary = true;
ftp.UsePassive = true;
//告诉ftp文件大小
ftp.ContentLength = fileinfo.Length;
const int BufferSize = 4096 * 4096;
byte[] content = new byte[BufferSize - 1 + 1];
int dataRead;
//上传文件内容
using (FileStream fs = fileinfo.OpenRead())
{
try
{
using (Stream rs = ftp.GetRequestStream())
{
do
{
dataRead = fs.Read(content, 0, BufferSize);
rs.Write(content, 0, dataRead);
} while (!(dataRead < BufferSize));
rs.Close();
WriteLog("upload sucess!");
txt_log.Text = "\r\n\n" + DateTime.Now.ToString() + ": " + "upload sucess!\r\n\n" + txt_log.Text;
}
}
catch (Exception ex)
{
WriteLog(ex.Message);
txt_log.Text = "\r\n\n" + DateTime.Now.ToString() + ": 异常警告:" + ex.Message + "\r\n\n" + txt_log.Text;
}
finally
{
fs.Close();
}
}
ftp = null;
//设置FTP命令
ftp = GetRequest(URI, username, password);
ftp.Method = System.Net.WebRequestMethods.Ftp.Rename; //改名
ftp.RenameTo = fileinfo.Name;
try
{
ftp.GetResponse();
}
catch (Exception ex)
{
ftp = GetRequest(URI, username, password);
// ftp.Method = System.Net.WebRequestMethods.Ftp.DeleteFile; //删除
ftp.GetResponse();
WriteLog(ex.Message);
WriteLog(ex.Message);
txt_log.Text = "\r\n\n" + DateTime.Now.ToString() + ": "+ ex.Message + "\r\n\n" + txt_log.Text;
}
finally
{
fileinfo.Delete();//删除原件
// WriteLog("file delete!");
}
ftp = null;
}
private static FtpWebRequest GetRequest(string URI, string username, string password)
{
FtpWebRequest result = (FtpWebRequest)FtpWebRequest.Create(URI);
result.Credentials = new System.Net.NetworkCredential(username, password);
result.KeepAlive = false;
return result;
}
#endregion
550 Access Denied —— 用户名、密码错误?
用户名 和 密码是没问题的!必经在创建文件夹路径这个操作上是已经成功了,但无法写入文件!
@暮色纯香: 我假设你的 FTP 服务器部署在 A 机器,那么请你现在在 B 机器的资源管理器中打开此 FTP 服务器,输入用户名和密码后,看看你能否创建新文件。
@Launcher: 不可以创建行的新文件,会有550Access Denied 异常!
@暮色纯香: 权限没设对,当前用户不具有写权限。
@Launcher: 我也是这样想的,但我借助了FileZilla去上传时 却能正常上传!
另外就是有一点不懂得还望指点一下!
我直接 “复制文件” 时能将其复制到FTP上, 那么这个操作和我的 “新建文件” 这两个有什么本质上的区别!
@暮色纯香: 你能截图给我看看你如何在资源管理器中登录、新建、粘贴的么?
我只想吐槽下楼主的注释 有你这么写的吗..
谢谢!提供意见!在下学艺不精,以后改正!
Access Denied 肯定就是权限的问题了~~用户没有权限在目录创建
谢谢 你提供建议!
访问ftp的用户,要有创建,删除,写入,读取的权限。
我用该用户的情况下 采用FileZilla 去上传文件是能传的!对于这个现象有点不太明白!
@暮色纯香: 或者给ftp对应的根目录 给个everyone权限试一试