2

ローカル コンピューターから FTP サーバーに FTP 経由でファイルをアップロードしようとしていますが、これは現在もローカル コンピューター上にあります。私が呼んでいるこのサブを持っています:

    Public Sub UploadFTPFile(ByVal ftpservername, ByVal fullfilepath, ByVal filename, ByVal username, ByVal password)

    Dim clsRequest As System.Net.FtpWebRequest = _
    DirectCast(System.Net.WebRequest.Create("ftp://" & ftpservername & "/" & filename), System.Net.FtpWebRequest)
    clsRequest.Credentials = New System.Net.NetworkCredential(username, password)
    clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile

    clsRequest.KeepAlive = False

    ' read in file...
    Dim bFile() As Byte = System.IO.File.ReadAllBytes(fullfilepath)

    ' upload file...
    Dim clsStream As System.IO.Stream = _
        clsRequest.GetRequestStream()
    clsStream.Write(bFile, 0, bFile.Length)
    clsStream.Close()
    clsStream.Dispose()
End Sub

サブを呼び出すときは、次のようにします。

UploadFTPFile("192.168.1.3/Temp", selectedSoundFileLong, OpenFileDialog.SafeFileName, "", "")

つまり、サブでは、この文字列:

DirectCast(System.Net.WebRequest.Create("ftp://" & ftpservername & "/" & filename), System.Net.FtpWebRequest)

、以下を作成します。

    DirectCast(System.Net.WebRequest.Create("ftp://192.168.1.3/Temp/test.mp3"), System.Net.FtpWebRequest)

そして、サブのこの行で:

        Dim clsStream As System.IO.Stream = _
        clsRequest.GetRequestStream()

このエラーが発生します:

The remote server returned an error: (550) File unavailable

これの原因は何ですか?フリーウェアの Golder FTP Server を使用して FTP サーバーを実行しています。Windows エクスプローラーを使用して上記とまったく同じ文字列を使用して FTP サーバーに接続するとうまくいくので、正しくセットアップされていると思います。

4

3 に答える 3

2

UsePassiveプロパティを反転してみてください。コントロールとデータは FTPで異なるポートを使用します。コントロール ポートでは通過できますが、データ ポートでは何らかの形でブロックされる可能性があります。

于 2009-10-31T18:16:04.717 に答える
2

webRequest 文字列に余分な空白が含まれていませんか? 文字列がたまたま「ftp://192.168.1.3/Temp/test.mp3 」のような場合、このエラーが発生すると思います。また、そのサーバーに書き込むための正しい権限があることを確認してください。さらに、ファイルがtest.MP3ではなくtest.mp3であることを確認してください。

于 2009-10-31T18:17:56.330 に答える