我可以上传单个文件,现在如何将多个文件上传到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
答案 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