para google files desarrolladores conectar con vb.net google-drive-sdk

vb.net - files - Descarga Resumible de Google Drive V3



upload file google drive c# (2)

Creo que deberías cambiar tu procedimiento Download_ProgressChanged como tihs:

Private Sub Download_ProgressChanged(s As IDownloadProgress) Select Case s.Status Case DownloadStatus.Downloading If True Then Console.WriteLine(progress.BytesDownloaded) Exit Select End If Case DownloadStatus.Completed If True Then Console.WriteLine("Download complete.") Exit Select End If Case DownloadStatus.Failed If True Then Console.WriteLine("Download failed.") Exit Select End If End Select End Sub

El enlace está aquí: https://developers.google.com/drive/v3/web/manage-downloads .

Puede usar bu descargas parciales para calcular bytes de inicio y final.

Utilizo este código para descargar un archivo de Google Drive usando Google Drive api V3:

Function gDownload() As Boolean Dim fileID As String = "0B-W1aRTTOB1QM3hPd0dOUFVObHM" Dim stream = New System.IO.MemoryStream() Dim r = service.Files.Get(fileID) Dim m = r.MediaDownloader m.ChunkSize = 256 * 1024 AddHandler m.ProgressChanged, AddressOf Download_ProgressChanged mStart: r.Download(stream) Return True '' or False if download failed End Function Private Sub Download_ProgressChanged(s As IDownloadProgress) Console.WriteLine(s.Status.ToString & " " & s.BytesDownloaded) End Sub

Esto funciona bien con una conexión estable, pero si pierdo la conexión se detiene y espera por siempre, incluso si me vuelvo a conectar.

No tengo este problema con la función de actualización (carga) en este código:

Function gUpload() As Boolean Dim fileID As String = "0B-W1aRTTOB1QM3hPd0dOUFVObHM" Dim stream As New System.IO.FileStream("D:/gtest/Test.mp4", System.IO.FileMode.Open) Dim fBody As File = New File With {.Name = "Test.mp4"} Dim r = service.Files.Update(fBody, fileID, stream, "application/octet-stream") r.ChunkSize = ResumableUpload.MinimumChunkSize AddHandler r.ProgressChanged, AddressOf Upload_ProgressChanged mStart: r.Resume() If r.GetProgress.Status = 3 Then '' UploadStatus.Completed Return True Else If MessageBox.Show("Failed. do you want to resume?", "Failed", MessageBoxButtons.YesNo) = DialogResult.Yes Then GoTo mStart End If End If Return False End Function Private Sub Upload_ProgressChanged(s As IUploadProgress) Console.WriteLine(s.Status.ToString & " " & s.BytesSent) End Sub

Esto funciona exactamente como yo quiero, si pierdo la conexión durante algún tiempo (15 ~ 30s), aparece un mensaje que indica que la carga ha fallado y le da al usuario la opción de reanudar o salir. todo funciona a la perfección

Así que mi pregunta es: cómo hacer que la función de descarga funcione como la función de carga o al menos hacer que no espere para siempre y da un mensaje de error.


Tuve el mismo problema, resolví temporalmente con un "mientras"

Request.DownloadAsync(Stream) Dim bytes_downloaded As Long = 0 Dim not_downloaded As Integer = 0 Dim progress As Integer = Stream.Length Do While progress < file_size progress = Stream.Length If progress = bytes_downloaded Then not_downloaded += 1 If not_downloaded >= 900 Then ''90 seconds '' msg download falhou Exit Do End If Else not_downloaded = 0 End If bytes_downloaded = progress Threading.Thread.Sleep(100) Loop