FTP,的GetResponse(),错误550文件不可用FTP,的GetResponse(),错误

2019-05-12 04:48发布

我创建了一个小的Windows窗体应用程序的文件上传到我们的客户的FTP站点之一。 但是,我遇到的问题是,当我在我的本地机器上运行这个应用程序是将文件上传成功。 但是,如果我在我们的服务器上运行这个程序,我得到这个错误信息;

远程服务器返回错误:(550)文件不可用(例如,未找到文件,不能访问该文件),在这条线“objFTPRequest.GetRequestStream();”。

有谁知道为什么吗? 我是否需要配置防火墙什么的? 这里是我的代码;

FileInfo objFile = new FileInfo(filename);
FtpWebRequest objFTPRequest;

// Create FtpWebRequest object 
objFTPRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/outbox/" + objFile.Name));

// Set Credintials
objFTPRequest.Credentials = new NetworkCredential(ftpUserName, ftpPassword);

// By default KeepAlive is true, where the control connection is 
// not closed after a command is executed.
objFTPRequest.KeepAlive = false;

// Set the data transfer type.
objFTPRequest.UseBinary = true;

// Set content length
objFTPRequest.ContentLength = objFile.Length;

// Set request method
objFTPRequest.Method = WebRequestMethods.Ftp.UploadFile;

// Set buffer size
int intBufferLength = 16 * 1024;
byte[] objBuffer = new byte[intBufferLength];

// Opens a file to read
FileStream objFileStream = objFile.OpenRead();


// Get Stream of the file
Stream objStream = objFTPRequest.GetRequestStream();

int len = 0;

while ((len = objFileStream.Read(objBuffer, 0, intBufferLength)) != 0)
{
    // Write file Content 
    objStream.Write(objBuffer, 0, len);

}

            objStream.Close();
            objFileStream.Close();

Answer 1:

可由于多种原因,如文件会导致此错误是不存在于服务器上的文件安全权限等等等等。

首先,你需要找出错误的确切原因。 这可以通过使用下面的代码 - 来实现

try
{
        //Your code
}
catch(WebException e)
{
        String status = ((FtpWebResponse)e.Response).StatusDescription;
}

一旦你得到错误的确切原因,你可以去向前来解决它。

这里有一些链接,您可以参考

http://forums.asp.net/t/1777881.aspx/1

http://nickstips.wordpress.com/2010/10/25/c-ftp-upload-error-the-remote-server-returned-an-error-550-file-unavailable-eg-file-not-found-没有访问/

http://www.dreamincode.net/forums/topic/76361-file-upload-to-server/

http://forums.asp.net/t/1374306.aspx/1



Answer 2:

试试这个: FTP://xxx.xxx.xx.xx:21 //路径/文件名

该服务器地址开始你出在根目录下的“//”之后。 即使我有: FTP://xxx.xxx.xx.xx:21 /路径/文件名 ,它并没有带我去正确的目录。



Answer 3:

我遇到了同样的问题,这是我做的:

  1. 检查OS有写的权利。 查找FTP文件夹=>点击右键=>属性=>安全,那么你必须知道你应该做什么
  2. 查看FTP服务器打开你登录的用户的写权限。 打开IIS =>点击FTP站点=> FTP授权规则=>添加允许规则=>选择用户或组设置权限
  3. 查看FTP服务器上的目录,做第2项同样的事情。

我可以用四个画面显示要设置的权限:



Answer 4:

这可能是更加简单。

我面临着类似的问题,我尝试了所有建议的解决方案,但没有一个人的工作。 我以简单的方式这样一个搞清楚:看看

在我结束错误的代码

 Dim request As Net.FtpWebRequest = CType(FtpWebRequest.Create("ftp://xxx.xxx.xxx.xxx/files"), FtpWebRequest)

改变它在这个简单的一个:

 Dim request As Net.FtpWebRequest = CType(FtpWebRequest.Create("ftp://xxx.xxx.xxx.xxx/files/youfilename.ext"), FtpWebRequest)

然后用填充请求procced并发送至服务器:)

就这样。

确保在服务器上做工精细和你就像所有的许可使用权证书。



Answer 5:

为了解决这个问题,就需要强制System.Net.FtpWebRequest命令恢复到它的使用方式发出的实际命令之前在.Net框架2.0 / 3.5工作,并发出额外的CWD命令旧的行为。

为了做到这一点,需要将下面的代码在调用System.Net.FtpWebRequest类的任何实例之前放置。 下面只代码需要被调用一次,因为它改变了整个应用程序域的设置。

private static void SetMethodRequiresCWD()
{
        Type requestType = typeof(FtpWebRequest);
        FieldInfo methodInfoField = requestType.GetField("m_MethodInfo", BindingFlags.NonPublic | BindingFlags.Instance);
        Type methodInfoType = methodInfoField.FieldType;


        FieldInfo knownMethodsField = methodInfoType.GetField("KnownMethodInfo", BindingFlags.Static | BindingFlags.NonPublic);
        Array knownMethodsArray = (Array)knownMethodsField.GetValue(null);

        FieldInfo flagsField = methodInfoType.GetField("Flags", BindingFlags.NonPublic | BindingFlags.Instance);

        int MustChangeWorkingDirectoryToPath = 0x100;
        foreach (object knownMethod in knownMethodsArray)
        {
            int flags = (int)flagsField.GetValue(knownMethod);
            flags |= MustChangeWorkingDirectoryToPath;
            flagsField.SetValue(knownMethod, flags);
        }
 }

http://support.microsoft.com/kb/2134299



Answer 6:

当我有同样的问题,我想以上,一天后的一切后,我意识到,我对于具有“/”文件夹名称之间的空格的URI创建的路径

string uri="192.168.1.101/ Sync/Image.jpg";

上述字符串应该是

string uri="192.168.1.101/Sync/Image.jpg";

这个小小的失误也抛出了同样的错误,这是一个有效的错误,因为这不是我们的文件,如果它包含“/”和文件夹/文件名之间的空格有效路径



Answer 7:

最近我也有这个问题。 我发现的是,当我使用ftpUploadFile例程试图把文件中的根FTP文件夹。 普通FTP命令行工作的罚款。 然而,从发出命令行FTP一个pwd命令透露,这种特殊的服务器被设置在登录不同的当前目录。 改变我的ftpUploadFile包括这个文件夹解决了问题。



Answer 8:

只是扔在擂台上我的帽子,我得到了同样的错误。 当FTPRequest被要求从FTP服务的同一台计算机(同一IP)上的文件。 在请求我所用的机器的IP地址,但一旦我改变了为127.0.0.1它的工作。 有趣的是,来自其他IP地址的请求正在处理和下载的文件,只是不从自身。

希望帮助别人。



Answer 9:

当我与ftpuri和用户名称路径是解决当我创建FTP访问,我已经选择了路径/目录名相比,我有同样的问题,

在当我列入目录名ftpuri它给了错误,当我删除了目录名被解决。

ftpuri错误

“ ftp://www.example.com/Project/yourfilename.ds ”

ftpuri解决

“ ftp://www.example.com/yourfilename.ds ”

FTP访问文件夹“/项目”



Answer 10:

确保目标文件夹“发件箱”的存在。 这是我的问题,错误550。

只需创建上传前目标目录“输出”。

try
        {
            WebRequest request = WebRequest.Create("ftp://" + ftpServerIP + "/outbox");
            request.Credentials = new NetworkCredential("user", "password");
            request.Method = WebRequestMethods.Ftp.MakeDirectory;
            using (var resp = (FtpWebResponse)request.GetResponse())
            {
                Console.WriteLine(resp.StatusCode);
            }
        }
        catch (WebException ex)
        {
            FtpWebResponse response = (FtpWebResponse)ex.Response;
            if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
            {
                response.Close();
                //already exists
            }
            else
            {
                response.Close();
                //doesn't exists = it's another exception
            }
        }


Answer 11:

我有这个问题。 FileZilla的很好,.NET不是。 这是一个WordPress的服务器。 为了得到它的工作,我从这个改变了我的代码:

ftp://XXX.XXX.XXX.XXX//folder// “+ txtFile.Text

至:

的ftp:// [FTPNAME] @ XXX.XXX.XXX.XXX // “+ txtFile.Text

而现在值得庆幸的作品。

我不知道这是否是专门针对WordPress的FTP文件夹。



Answer 12:

在我的情况下,在那失踪我的FTP地址引用的根文件夹。 之后创建问题得到解决的文件夹。

FTP://xxx.xxx.xx.xx:21 // rootfolder /



Answer 13:

我找到了解决办法。 问题是,FTP用户的当前工作目录。 如果你键入一个URL,例如FTP:///path/test.txt它作为RO工作目录的相对路径。 例如CWD是/测试,则使用的路径是/test/path/test.txt。 如果要使用绝对路径,你必须键入喜欢的URL ftp:////path/test.txt。 然后将文件上传的文件夹/path/test.txt,无一例外。



文章来源: FTP, GetResponse (), error 550 File unavailable