vb.net - Google Drive V3 Resumable डाउनलोड करें




google-drive-sdk (2)

मुझे लगता है कि आपको अपनी Download_ProgressChanged प्रक्रिया को 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

लिंक यहां है: https://developers.google.com/drive/v3/web/manage-downloads

आप आंशिक डाउनलोड बू उपयोग कर सकते हैं जिसे आपको प्रारंभ और अंत बाइट्स की गणना करनी है।

मैं Google डिस्क एपीआई वी 3 का उपयोग करते हुए Google डिस्क से एक फ़ाइल डाउनलोड करने के लिए इस कोड का उपयोग करता हूं:

    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

यह स्थिर कनेक्शन के साथ ठीक काम करता है, लेकिन अगर मैं कनेक्शन खो देता हूं तो यह रोकता है और हमेशा के लिए इंतजार करता है, भले ही मैं फिर से फिर से कनेक्ट हो।

इस कोड में अपडेट (अपलोड) फ़ंक्शन में मेरे पास यह समस्या नहीं है:

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

यह ठीक तरह से काम करता है जैसे मैं चाहता हूं, अगर मैं कुछ समय (15 ~ 30 से) के लिए कनेक्शन खो देता हूं तो यह संदेश देता है कि अपलोड विफल हो गया है और उपयोगकर्ता को फिर से शुरू या बाहर निकलने का विकल्प मिलता है। सब कुछ ठीक से काम करता है

तो मेरा प्रश्न यह है कि कैसे डाउनलोड फ़ंक्शन को अपलोड फ़ंक्शन की तरह काम करना है या कम से कम यह हमेशा के लिए इंतजार नहीं करता है और एक असफल संदेश देता है।


मुझे एक ही समस्या थी, मैंने अस्थायी रूप से एक "जबकि"

    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






google-drive-sdk