AlexF185 Ответов: 1

Загрузка FTP-файла с пробелами в имени подпапки


У меня возникла проблема с загрузкой zip-файлов из суб-директории ftp-сайта.
Он работает с любым другим типом файла, даже если в поддиректоре есть пробелы.
Если в sub-dir нет пробелов, то zip-файл тоже работает нормально.

Исключение составляет "удаленный сервер вернул ошибку: (550) файл недоступен (например, файл не найден, нет доступа)."

Net.FtpWebResponse.StatusDescription = " 550 Доступ запрещен."

большое спасибо

Что я уже пробовал:

Public Shared Sub TempDownload()
    Try

        Dim ftpRoot As String = "ftp://10.0.0.99/"
        Dim ftpUser As String = "FtpUserName"
        Dim ftpPass As String = "FtpPassword"

        Dim strMainFolder As String = "\\DOMAIN\FOLDER1"
        Dim myFolder As String = "DEVELOPMENT HOME 948"
        Dim myFile As String = "MyZipFileName.zip"


        Dim reqFTP As Net.FtpWebRequest

        Dim outputStream As New IO.FileStream(IO.Path.Combine(IO.Path.Combine(strMainFolder, myFolder), myFile), IO.FileMode.Create)

        reqFTP = Net.FtpWebRequest.Create(New Uri(ftpRoot & myFolder & "/" & myFile))

        reqFTP.Method = Net.WebRequestMethods.Ftp.DownloadFile
        reqFTP.UseBinary = True
        reqFTP.Credentials = New Net.NetworkCredential(ftpUser, ftpPass)
        reqFTP.UsePassive = False

'=====
'### The exception occurs here
        Dim response As Net.FtpWebResponse = DirectCast(reqFTP.GetResponse(), Net.FtpWebResponse) 
'=====

        Dim ftpStream As IO.Stream = response.GetResponseStream()
        Dim cl As Long = response.ContentLength
        Dim bufferSize As Integer = 2048
        Dim readCount As Integer
        Dim buffer As Byte() = New Byte(bufferSize - 1) {}

        readCount = ftpStream.Read(buffer, 0, bufferSize)
        While readCount > 0
            outputStream.Write(buffer, 0, readCount)
            readCount = ftpStream.Read(buffer, 0, bufferSize)
        End While

        ftpStream.Close()
        outputStream.Close()
        response.Close()

    Catch ex As Net.WebException
        MessageBox.Show(DirectCast(ex.Response, Net.FtpWebResponse).StatusDescription)

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub

1 Ответов

Рейтинг:
9

Jochen Arndt

Это ответ, отправленный с сервера:

Net.FtpWebResponse.StatusDescription = "550 Access is denied."

Это довольно ясно. У вас нет прав доступа к файлу или каталогу.

Если у вас есть прямой доступ к серверу, проверьте его разрешения. Если нет, используйте FTP-клиент, который может показывать права доступа к файлам (например, FileZilla).


AlexF185

Большое Спасибо Йохену Арндту.
Я проверил права доступа к папке и некоторые файлы внутри этой папки. Они были в порядке. Я не проверял разрешения других файлов, которые моя система пытается загрузить в ту же папку. Оказывается, это zip-файлы, сгенерированные SQL Backup Master со своими собственными разрешениями. Однако при проверке наследования Windows по-прежнему рассматривает разрешения как унаследованные, когда они явно не являются таковыми.