При загрузке я получил следующее сообщение об ошибке.Powershell создает zip-файл, используя 7za.exe
, и вызывает мою функцию FTP для загрузки файла.Что может вызвать проблему?Будет ли Windows ftp.exe клиент более стабильным?
Исключение вызывает "GetRequestStream" с аргументом "0": "Удаленный сервер возвратил ошибку: (550) Файл недоступен (например, файлне найден, нет доступа). "
Обновление:
Кажется, одни и те же файлы всегда терпели неудачу в цикле.Тем не менее, Это работает, если я просто запускаю ftpFile file_name_with_full_path
.(file_name_with_full_path
копируется из выходных данных скрипта цикла.
Обновление 2:
Я пытался использовать webclient
($webclient.UploadFile($uri, $File))
дляftp файлы. Та же ошибка.
Обновление 3:
Найден этот Вопрос . Возможно, потребуется добавить $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: $_"
}
}
}