2012-01-13 18 views
2

アップロード時に次のエラーメッセージが表示されました。 Powershellは7za.exeを使用してzipファイルを作成し、私のFTP関数を呼び出してファイルをアップロードします。何が問題を引き起こす可能性がありますか? Windowsのftp.exeクライアントはより安定しますか?2〜3回のアップロードが成功するたびにFTPアップロードが失敗しました

Exception calling "GetRequestStream" with "0" argument(s): "The remote server returned an error: (550) File unavailable (e.g., file not found, no access)."

更新:
同じファイルが常にループで失敗したようです。しかし、私はちょうど実行すると動作しますftpFile file_name_with_full_path。 (file_name_with_full_pathはループスクリプトの出力からコピーされ

アップデート2:
私は、ファイルをftpにwebclient($webclient.UploadFile($uri, $File))を使用しようとした同じエラー

アップデート3:見つかり
このQuestion$ftp.KeepAlive = falseを追加する必要があります。なぜ?

function ftpFile 
{ 
    Param (
     [Parameter(Mandatory=$true, ValueFromPipeline=$true)] 
     [ValidateScript({Test-Path $_})] 
     [String] 
     $filePath 
     , 
     [Parameter(Mandatory=$false)] 
     [String] 
     $ftpUrl = "ftp://10.0.1.1/Data/" 
     , 
     [Parameter(Mandatory=$false)] 
     [String] 
     $Login = "username" 
     ,  
     [Parameter(Mandatory=$false)] 
     [String] 
     $password = "password" 
    ) 
    Process { 
     try { 
      $ftp = [System.Net.FtpWebRequest]::Create("$ftpUrl/$(Split-Path $filePath -Leaf)") 
      $ftp = [System.Net.FtpWebRequest]$ftp 
      $ftp.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile 
      $ftp.Credentials = new-object System.Net.NetworkCredential("$Login","$password") 
      $ftp.UseBinary = $true 
      $ftp.UsePassive = $true 

      # read in the file to upload as a byte array 
      $content = gc -en byte $filePath 
      $ftp.ContentLength = $content.Length 

      # get the request stream, and write the bytes into it 
      $rs = $ftp.GetRequestStream() 
      $rs.Write($content, 0, $content.Length) 
      $rs.Close() 
      $rs.Dispose() 

      echo "ftpFile: $filePath size: $($content.Length)" 
     } 
     catch { 
      throw "FTP: $_" 
     } 
    } 
} 
+0

ループを使用してファイルをアップロードしていますか?それはいつも同じファイルで失敗するのですか? –

+0

@AndyArismendiはい、私はファイルをアップロードするためにループを使用しています。アップロードされたファイルは、アップロードする直前に圧縮されていました。 ftpFileを呼び出す前に 'start-sleep -s 1'を追加しました。 – ca9163d9

+0

@AndyArismendiはい、それは常に同じファイルで失敗するようです。ファイルが新しく生成されたとはいえ、そしてそれはループの中で問題を抱えているだけです。 – ca9163d9

答えて

0

この質問が見つかりました。 $ftp.KeepAlive = falseを追加する必要があります。

+0

$ ftp.KeepAlive = $ false –

0

FTPエラー55 0はアクセスが拒否され、ユーザー名とパスワードの競合になりがちです。

あなたはそれがループのある繰り返しに取り組んでいない ループを使用し、同じユーザー名とパスワードを渡し、この関数は 呼び出されるたびに、ANDている場合は他の人 THENますが、ftp認証/エラーをチェックする必要があり なぜあなたが拒否されているのかを把握するためにサーバーにログを記録します。

@AndyArismendiが尋ねたとおり、常に同じファイルで失敗するのでしょうか?より完全なコードと使用の理解がなければ、これを単純な解決策にするのは難しいです。

+0

はい、同じファイルで失敗します。しかし、 'ftpFile name'はエラーなしで動作します。非常に奇妙な。 – ca9163d9

関連する問題