使用vb.net将多个文件上载到FTP服务器

时间:2011-07-15 22:39:19

标签: vb.net upload ftp

我可以上传单个文件,现在如何将多个文件上传到FTP服务器:

以下是我正在使用的代码:

Private Sub uploadFile(ByVal FTPAddress As String,ByVal filePath As String,ByVal username As String,ByVal password As String)         '创建FTP请求

    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

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

        stream.Read(buffer, 0, buffer.Length)
        stream.Close()

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

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


Private Sub btnUpload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpload.Click
    btnUpload.Enabled = False
    Application.DoEvents()
    uploadFile(txtFTPAddress.Text, txtFilePath.Text, txtUsername.Text, txtPassword.Text)
    btnUpload.Enabled = True
End Sub

这是我修改但不工作的方式:

 If Me.FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
        Dim f As New IO.DirectoryInfo(Me.FolderBrowserDialog1.SelectedPath)
        For Each file As IO.FileInfo In f.GetFiles
            Select Case file.Extension.ToLower
                Case ".jpg", ".bmp", ".gif", ".png", ".ico"
                    CheckedListBox1.Items.Add(file.FullName, CheckState.Checked)
            End Select
        Next
        For pix As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1
            btnUpload.Enabled = False
            Application.DoEvents()
            uploadFile(txtFTPAddress.Text, txtFilePath.Text, txtUsername.Text, txtPassword.Text)
            btnUpload.Enabled = True
        Next
    End If
End Sub

2 个答案:

答案 0 :(得分:3)

For Each _____ in ______ collection
uploadFile(txtFTPAddress.Text, txtFilePath.Text, txtUsername.Text, txtPassword.Text)
Next

(填空 - 空白取决于你用来存储文件名的控件。)

答案 1 :(得分:2)

根据您收集文件列表的方式,只需迭代一个集合即可。

我只是假设一个字符串,例如:

Dim files As List(Of String) = New List(Of String)

For Each file In files
  uploadFile(txtFTPAddress.Text, file, txtUsername.Text, txtPassword.Text)
Next

另外,请考虑实现using的对象的IDisposable语句。

 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