1
私は、ユーザーが大きなファイルを簡単に入手できるように、フォームをドロップしたときにサーバーにファイルをアップロードするプログラムを用意しています。 私はほとんどの作業をしていますが、バックグラウンドでファイルが静かにアップロードされている間に、5分間そこに座っているのではなく、ユーザーが作業していることを知るためのプログレスバーを持っています。FtpWebRequestでプログレスバーをアップロードする
プログラムが動作していて、凍結されていないと思われるので、進捗バーのパルスを送って嬉しいです。もし私が実際の状態を示すことができればそれは良いでしょう。
マイコード:
Private Sub Grid1_Drop(sender As System.Object, e As System.Windows.DragEventArgs) Handles Grid1.Drop
Dim sFileInfo As System.IO.FileInfo
Dim sStatus As String = ""
If e.Data.GetDataPresent("FileDrop") Then
Try
Dim theFiles() As String = CType(e.Data.GetData("FileDrop", True), String())
For Each file As String In theFiles
sFileInfo = New System.IO.FileInfo(file)
If UploadFile(txtUsername.Text, sFileInfo) Then
lstFileList.Items.Add(file & " - Uploaded")
Else
lstFileList.Items.Add(file & " - Upload Failed")
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub
Public Function UploadFile(ByVal User As String, ByVal oFile As FileInfo) As Boolean
Dim ftpRequest As FtpWebRequest
Dim ftpResponse As FtpWebResponse
Try
ftpRequest = CType(FtpWebRequest.Create(Base + User + "/" + oFile.Name), FtpWebRequest)
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile
ftpRequest.Proxy = Nothing
ftpRequest.UseBinary = True
ftpRequest.Credentials = Cred
ftpRequest.KeepAlive = KeepAlive
ftpRequest.EnableSsl = UseSSL
If UseSSL Then ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate)
Dim fileContents(oFile.Length) As Byte
Using fr As FileStream = oFile.OpenRead
fr.Read(fileContents, 0, Convert.ToInt32(oFile.Length))
End Using
Using writer As Stream = ftpRequest.GetRequestStream
writer.Write(fileContents, 0, fileContents.Length)
End Using
ftpResponse = CType(ftpRequest.GetResponse, FtpWebResponse)
ftpResponse.Close()
ftpRequest = Nothing
Return True
Catch ex As WebException
Return False
End Try
End Function
昔、私はこれを使っていましたが、 FTPWebRequestをどのくらいファイルがアップロードされたかを報告する方法をよく分かりません。おそらく何らかの種類のバッファが必要になるかもしれませんが、多くの良い例はまだ見つかりません。 – AndyD273
私はマーキースタイル、つまり循環進捗インジケータに固執する傾向があり、実際に何かが起こっていることをユーザーに示すことができます。 – emybob
複数のファイルをアップロードする場合は、少なくともファイルごとに進捗を確認し、すべてのファイルをフルバールにスケーリングします。進行中のファイルの名前とファイルのサイズを報告します。 – Paparazzi