Как загрузить файл на Google Диск с помощью vb. net? - PullRequest
1 голос
/ 30 мая 2020


Мне нужна помощь в загрузке файла на Google Диск.
Все работает нормально, но с ошибкой во время первой попытки.
Во время отладки на request.upload курсор не ждет (дождитесь файл для загрузки) и переходит к следующей строке Dim responsefile As New Data.File, и я ничего не получаю в request.ResponseBody.
После этого я запускаю курсор функции, который фактически ждет request.upload, и он успешно загружает файл.
Я не Я не знаю, что происходит на самом деле. Я каждый раз проверял данные, и они одни и те же.

Public Async Function UploadFile3(service As DriveService, FilePath As String) As Tasks.Task(Of Data.File)

        If service3.ApplicationName <> "netGDriveApi" Then CreateService()
            If IO.File.Exists(FilePath) Then
                Dim body As New Data.File()
                body.Name = IO.Path.GetFileName(FilePath)
                body.Description = "BackUP file"
                body.MimeType = "application/octet-stream"
                'body.FileExtension = ".bak"



                '-------------------------------------------------UPLOAD FILE PROCESS-------------------------------------------------------------

                Dim byteArray As Byte() = IO.File.ReadAllBytes(FilePath)
                Dim stream As New IO.MemoryStream(byteArray)
                Try
                    Dim request As FilesResource.CreateMediaUpload = service.Files.Create(body, stream, body.MimeType)
                    Await request.UploadAsync() 'Cursor skips first time here and dont wait for response.
                    Dim responsefile As New Data.File 'Cursor waits from the above step to here till the file uploaded.


                    responsefile = request.ResponseBody

                    If IsNothing(responsefile) Then
                        MessageBox.Show("Try Again")
                    Else
                        MessageBox.Show(responsefile.Id.ToString)
                    End If

                Catch e As Exception
                    MessageBox.Show("An error occurred: " + e.Message)
                    Return Nothing
                End Try

            Else
                MessageBox.Show("FILE DOES NOT EXISTS." + FilePath)
                Return Nothing
            End If
End Function

Ответы [ 2 ]

2 голосов
/ 02 июня 2020

request.UploadAsync() возвращает Task(Of IUploadProgress). По крайней мере, вы должны изучить результат этой задачи. Это может подсказать вам причину ваших проблем.

Например, во время отладки вы можете сделать что-то вроде следующего:

Try
    Dim request As FilesResource.CreateMediaUpload = service.Files.Create(body, stream, body.MimeType)

    Dim Upload As IUploadProgress = Await request.UploadAsync() 'Cursor skips first time here and dont wait for response.

    If Upload.Status <> UploadStatus.Completed Then
        Dim ex As Exception = Upload.Exception
        MessageBox.Show(ex.Message, "UploadAsync Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Return Nothing
    Else
        MessageBox.Show(Upload.Status.ToString, "Upload Status:")
    End If

    Dim responsefile As New Data.File 'Cursor waits from the above step to here till the file uploaded.
    responsefile = request.ResponseBody

Всегда проверяйте, какие информационные методы возвращают, и используйте эта информация по мере необходимости в вашем производственном коде.

0 голосов
/ 08 июня 2020

Строка Dim request As FilesResource.CreateMediaUpload = service.Files.Create(body, stream, body.MimeType). Проблема здесь.
Спасибо @ steve c за указание мне ошибки.
Служба накопителя - это service3, а в строке выше это только что написано service.Files.Create.
Таким образом, фактический исправленный ответ
Dim request As FilesResource.CreateMediaUpload = service3.Files.Create(body, stream, body.MimeType)

...