Google Drive API如何vb.net文件下载

时间:2019-07-08 08:47:11

标签: vb.net google-drive-api

我的问题是使用Google Drive API通过Visual Basic .NET下载文件。当我使用FileStream时,它会创建文件,但不会完全下载它。看起来是0MB。我想使用FileID进行下载。不是通过URL。

我的代码错误在哪里?

Me.Cursor = Cursors.WaitCursor
If Service.ApplicationName <> "vbNETDriveTools" Then CreateService()
Dim Downloader = New MediaDownloader(Service)
Downloader.ChunkSize = 256 * 1024
Dim fileid1 = "DriveFileID"
Dim Request1 = Service.Files.Get(fileid1)
Dim Results = Request1.Execute()
Dim filename = "C:\Users\XXX\Desktop\" & Results.OriginalFilename
Using Stream = New FileStream(filename, FileMode.Create, FileAccess.Write)
    Dim Progress = Downloader.DownloadAsync("which url should I write", Stream)
    Threading.Thread.Sleep(1000)
    Do While Progress.Status = TaskStatus.Running
    Loop
    If Progress.Status = TaskStatus.RanToCompletion Then
        MsgBox("Download Complete!")
    Else
        MsgBox("Download Failed :(")
    End If
End Using
Me.Cursor = Cursors.Default

是否有示例代码可以作为Windows Form应用程序提供帮助?

2 个答案:

答案 0 :(得分:0)

方法Downloader.DownloadAsync()需要使用URL而不是文件ID。检查以下有关如何从文件ID获取Google云端硬盘上文件的URL的信息。

  1. stackoverflow的类似问题的答案建议将导出链接创建为:https://www.googleapis.com/drive/v3/files/fileIdxxxxx/export&mimeType=xxxxx/xxxxx。确保您对URL编码为mime类型。
  2. Google Drive Api文档描述了属性webContentLinkexportLinks,您可以通过列出文件并在参数字段中指定这些属性来获取它们。
  3. App脚本具有方法getDownloadUrl()

您必须测试其中哪些链接适用于您的应用程序。

答案 1 :(得分:0)

我不想通过URL下载。我已经找到带有FileID的文件并进行下载过程。以下代码仅允许我将10MB的文件下载到桌面(http://prntscr.com/ocpd7x)。相同的文件Google云端硬盘为350MB。如何下载整个文件?代码中的错误在哪里?

If Service.ApplicationName <> "vbNETDriveTools" Then CreateService()
Dim fileid As String = "1PVsSbS5qEhuMEtDPeuPsvA_eBDy_XX_C"
Dim Request = Service.Files.Get(fileid)
Dim Results = Request.Execute()
Dim Downloader = New MediaDownloader(Service)
Dim filename = "C:\Users\XXX\Desktop\" & Results.OriginalFilename
Dim Stream As System.IO.FileStream = New FileStream(filename, FileMode.Create, FileAccess.Write)
AddHandler Request.MediaDownloader.ProgressChanged, AddressOf ProgChanged
Request.DownloadAsync(Stream)