アップロード時に次のエラーメッセージが表示されました。 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: $_"
}
}
}
ループを使用してファイルをアップロードしていますか?それはいつも同じファイルで失敗するのですか? –
@AndyArismendiはい、私はファイルをアップロードするためにループを使用しています。アップロードされたファイルは、アップロードする直前に圧縮されていました。 ftpFileを呼び出す前に 'start-sleep -s 1'を追加しました。 – ca9163d9
@AndyArismendiはい、それは常に同じファイルで失敗するようです。ファイルが新しく生成されたとはいえ、そしてそれはループの中で問題を抱えているだけです。 – ca9163d9