近期在处理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权限试一试