2

SSLを介して特定のディレクトリへのFTPサイトへのファイルのアップロードで問題が発生しました。私はSystem.Net.FtpWebRequest classこの目的のために使用しています。アップロードは順調に進んでいます。ただし、ファイルは常にホームディレクトリにドロップされます。何が間違っているのか考えてみませんか?あなたの助けに感謝。

    public bool UploadFile(string srcFilePath, string destFilePath = null)
    {
        if (String.IsNullOrWhiteSpace(srcFilePath))
            throw new ArgumentNullException("Source FilePath.");

        if (String.IsNullOrWhiteSpace(destFilePath))
            destFilePath = Path.GetFileName(srcFilePath);

        Uri serverUri = GetUri(destFilePath);

        //// the serverUri should start with the ftp:// scheme.
        if (serverUri.Scheme != Uri.UriSchemeFtp)
            return false;

        // get the object used to communicate with the server.
        FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.UploadFile);

        // read file into byte array
        StreamReader sourceStream = new StreamReader(srcFilePath);
        byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
        sourceStream.Close();
        request.ContentLength = fileContents.Length;

        // send bytes to server
        Stream requestStream = request.GetRequestStream();
        requestStream.Write(fileContents, 0, fileContents.Length);
        requestStream.Close();

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        Debug.WriteLine("Response status: {0} - {1}", response.StatusCode, response.StatusDescription);

        return true;
    }

    private FtpWebRequest CreateFtpRequest(Uri serverUri, string method)
    {
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
        request.EnableSsl = true;
        request.UsePassive = true;
        request.UseBinary = true;
        request.KeepAlive = true;
        request.Credentials = new NetworkCredential(_userName, _password);
        request.Method = method;
        return request;
    }

    private Uri GetUri(string remoteFilePath)
    {
        return new Uri(_baseUri, remoteFilePath);
    }
4

1 に答える 1

1

わかった。ついにそれを理解した。.NET4.0フレームワークの問題です。.NET 3.5を使用してソリューションを構築すると、見事に機能しました。

Microsoftからの.NETの新しいリリースのバグを見るのは嫌いで、理解するのに多くの質の高い時間を浪費しています。

于 2013-02-06T16:09:01.023 に答える