PowerShell FTP Загрузка файлов возвращает 421 Ошибка службы недоступна - PullRequest
0 голосов
/ 03 апреля 2020

Я создал скрипт для загрузки файлов с FTP-сервера. Скрипт работает хорошо со всеми протестированными серверами, за исключением одного. Для этого сервера я могу получить список каталогов, но при попытке загрузить файл не удается и выдает ошибку «421 Сервис недоступен, закрытие управляющего соединения». Ниже приведен код, который я использую для загрузки файла.

function Get-FtpFile
{
    Param ([string]$fileUrl, $credentials, [string]$destination)
    try
    {
        $FTPRequest = [System.Net.FtpWebRequest]::Create($fileUrl)
        if ($credentials)
        {
            $FTPRequest.Credentials = $credentials
        }
        $FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
        $FTPRequest.UseBinary = $true
        $FTPRequest.UsePassive = $true

        # Send the ftp request
        $FTPResponse = $FTPRequest.GetResponse()

        # Get a download stream from the server response
        $ResponseStream = $FTPResponse.GetResponseStream()

        # Create the target file on the local system and the download buffer
        $LocalFile = New-Object IO.FileStream ($destination,[IO.FileMode]::Create)
        [byte[]]$ReadBuffer = New-Object byte[] 1024

        # Loop through the download
        do {
            $ReadLength = $ResponseStream.Read($ReadBuffer,0,1024)
            $LocalFile.Write($ReadBuffer,0,$ReadLength)
        }
        while ($ReadLength -ne 0)

        $ResponseStream.Close()
        $ReadBuffer.clear()
        $LocalFile.Close()
        $FTPResponse.Close()
    }
    catch [Net.WebException]
    {
        return "Unable to download because: $($_.exception)"
    }
}

Я могу загружать файлы с этого сервера, используя Windows File Explorer FTP, поэтому я не думаю, что это проблема с сервером сам.

Одна интересная вещь, которую я заметил во время тестирования, заключается в том, что когда сервер возвращает список каталогов, каждое имя файла включает в себя завершающий NULL. Я попытался загрузить файлы, включая и не включая этот завершающий NULL, обе попытки приводят к одному и тому же коду ошибки.

Кто-нибудь видел подобную ошибку раньше? Или кто-нибудь знает о различиях в том, как Windows File Explorer использует FTP по сравнению со сценарием PowerShell, который я перечислил выше?

1 Ответ

0 голосов
/ 08 апреля 2020

У меня была проблема с неправильным удалением завершающего NULL в каждом имени файла. Как только я смог правильно удалить NULL, у меня больше не было проблем.

Если в будущем кто-нибудь столкнется с этой проблемой, столкнувшись с ошибками 421 при попытке загрузить файлы, проверьте, не содержат ли имена файлов, указанные в списке каталогов, завершающие символы NULL. Если это так, удалите эти символы из строк имени файла, прежде чем пытаться загрузить каждый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...