24

あるサーバーから別のFTPサーバーにファイルをアップロードしたいのですが、ファイルをアップロードするためのコードは次のとおりですが、次のようなエラーがスローされます。

リモートサーバーがエラーを返しました:(550)ファイルが利用できません(ファイルが見つからない、アクセスできないなど)。

これは私のコードです:

string CompleteDPath = "ftp URL";
string UName = "UserName";
string PWD = "Password";
WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName);
reqObj.Method = WebRequestMethods.Ftp.UploadFile;
reqObj.Credentials = new NetworkCredential(UName, PWD);
FileStream streamObj = System.IO.File.OpenRead(Server.MapPath(FileName));
byte[] buffer = new byte[streamObj.Length + 1];
streamObj.Read(buffer, 0, buffer.Length);
streamObj.Close();
streamObj = null;
reqObj.GetRequestStream().Write(buffer, 0, buffer.Length);
reqObj = null; 

どこが悪いのか教えていただけますか?

4

7 に答える 7

39

ftp パスが次のように設定されていることを確認してください。

string CompleteDPath = "ftp://www.example.com/wwwroot/videos/";

string FileName = "sample.mp4";

WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName);

次のスクリプトは、ftp 経由でファイルやビデオを別のサーバーにアップロードするのに最適です。

FtpWebRequest ftpClient = (FtpWebRequest)FtpWebRequest.Create(ftpurl + "" + username + "_" + filename);
ftpClient.Credentials = new System.Net.NetworkCredential(ftpusername, ftppassword);
ftpClient.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
ftpClient.UseBinary = true;
ftpClient.KeepAlive = true;
System.IO.FileInfo fi = new System.IO.FileInfo(fileurl);
ftpClient.ContentLength = fi.Length;
byte[] buffer = new byte[4097];
int bytes = 0;
int total_bytes = (int)fi.Length;
System.IO.FileStream fs = fi.OpenRead();
System.IO.Stream rs = ftpClient.GetRequestStream();
while (total_bytes > 0)
{
   bytes = fs.Read(buffer, 0, buffer.Length);
   rs.Write(buffer, 0, bytes);
   total_bytes = total_bytes - bytes;
}
//fs.Flush();
fs.Close();
rs.Close();
FtpWebResponse uploadResponse = (FtpWebResponse)ftpClient.GetResponse();
value = uploadResponse.StatusDescription;
uploadResponse.Close();
于 2012-04-14T07:54:39.690 に答える
14

FTPサーバーにファイルをアップロードするサンプルコードは次のとおりです

    string filename = Server.MapPath("file1.txt");
    string ftpServerIP = "ftp.demo.com/";
    string ftpUserName = "dummy";
    string ftpPassword = "dummy";

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

    // Create FtpWebRequest object 
    objFTPRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + 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();

    try
    {
        // 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();
    }
    catch (Exception ex)
    {
        throw ex;
    }
于 2012-05-15T13:44:22.880 に答える
2

あなたがまだ問題を抱えている場合のために、これが私がこれをすべて乗り越えた理由です。アップロードしようとしたディレクトリ内のファイルを完全に確認できたにもかかわらず、同じエラーが発生していました。つまり、ファイルを上書きしていました。

私のftpURLは次のようになりました:

// ftp://www.mywebsite.com/testingdir/myData.xml
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.mywebsite.com/testingdir/myData.xml"

したがって、私の資格情報は私のテスターのユーザー名とPWを使用します。

request.Credentials = new NetworkCredential ("tester", "testerpw");

さて、私の「テスター」ftpアカウントは「ftp://www.mywebsite.com/testingdir」に設定されていますが、実際にftpを実行するときは、「ftp://www.mywebsite.com」とテスターの資格情報を使用してログインすると、自動的に「testingdir」に送信されます。

したがって、これをC#で機能させるために、URLを使用することにしました-ftp://www.mywebsite.com/myData.xml テスターアカウントの資格情報を提供し、すべてが正常に機能しました。

于 2013-01-25T22:02:26.830 に答える