Проблема при загрузке нескольких файлов путем перетаскивания на FTP-сервер с использованием VB.net - PullRequest
0 голосов
/ 30 июля 2011

Я пытаюсь добавить несколько файлов на FTP-сервер путем перетаскивания, и я могу сделать это с помощью блока try catch, и если мы правильно установим параметры ftp, их загрузка займет 1 секунду, но если мы сообщим неверные данные, вешает трубку и не дает мне никакого сообщения об ошибке, хотя, если я дам исключительное сообщение.

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

Может ли кто-нибудь сказать мне, где я должен давать сообщения об успехе и неудаче, чтобы загрузка заняла несколько секунд, а если нет, немедленно дал мне сообщение.

Я совершенно сбит с толку, когда иду не так.

Любая помощь будет принята с благодарностью!

Вот мой код:

Private Sub uploadFile(ByVal FTPAddress As String, ByVal filePath As String, ByVal username As String, ByVal password As String) 'Create FTP request

    Try
        Dim request As FtpWebRequest = DirectCast(FtpWebRequest.Create(FTPAddress & "/" & Path.GetFileName(filePath)), FtpWebRequest)

        request.Method = WebRequestMethods.Ftp.UploadFile
        request.Credentials = New NetworkCredential(username, password)
        request.UsePassive = True
        request.UseBinary = True
        request.KeepAlive = False

        Dim buffer As Byte() = Nothing
        'Load the file
        Using stream As FileStream = File.OpenRead(filePath)
            buffer = New Byte(CInt(stream.Length - 1)) {}
            stream.Read(buffer, 0, buffer.Length)
        End Using

        'Upload file
        Using reqStream As Stream = request.GetRequestStream()
            reqStream.Write(buffer, 0, buffer.Length)
        End Using

        MsgBox("Uploaded Successfully", MsgBoxStyle.Information)
    Catch
       MsgBox("Failed to upload.Please check the ftp settings", MsgBoxStyle.Critical)
    End Try
End Sub

Вот код для перетаскивания

 Private Sub FlowLayoutPanel1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles FlowLayoutPanel1.DragDrop
    Try

        Dim Files As String() = CType(e.Data.GetData(DataFormats.FileDrop), String())

        For Each FileName As String In Files
                           Dim Extension As String = Path.GetExtension(FileName).ToLower
            If Array.IndexOf(SupportedExtensions, Extension) <> -1 Then
                uploadFile(txtFTPAddress.Text, FileName, txtUsername.Text, txtPassword.Text)

            End If

        Next
    Catch

    End Try

End Sub

1 Ответ

0 голосов
/ 30 июля 2011

Поскольку uploadFile вызывается при каждой загрузке файла, вы можете переместить код обработки ошибок из этого метода в метод dragDrop. Таким образом, вы получите только одно сообщение о том, что вся операция прошла успешно или не удалась. Вы также можете установить свойство Timeout в FtpWebRequest, чтобы отменить загрузку, если это займет более нескольких секунд.

Тогда uploadFile становится:

Private Sub uploadFile(ByVal FTPAddress As String, ByVal filePath As String, ByVal username As String, ByVal password As String) 'Create FTP request
    Dim request as FtpWebRequest = ...
    request.Timeout = 5000 ' Set timeout to 5 seconds
    '... several lines omitted
    'Upload file
    Using reqStream As Stream = request.GetRequestStream()
        reqStream.Write(buffer, 0, buffer.Length)
    End Using
End Sub

Затем можно переместить код обработки ошибок в метод, обрабатывающий перетаскивание:

Private Sub FlowLayoutPanel1_DragDrop(ByVal sender As Object, ByVal e As  
    System.Windows.Forms.DragEventArgs) Handles FlowLayoutPanel1.DragDrop
    Try
       ' ... several lines omitted
       Next
       MsgBox("Uploaded Successfully", MsgBoxStyle.Information)
    Catch
       MsgBox("Failed to upload.Please check the ftp settings", MsgBoxStyle.Critical)
    End Try
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...