Как сделать функцию обновления файла Google Drive «возобновляемой»? - PullRequest
0 голосов
/ 14 апреля 2019

Используя документацию по Google Drive API, я разработал, как написать код для обновления файла Google Drive с помощью «простых» загрузок, но я не знаю, как превратить эту функцию в «возобновляемую» версию, которая использует request.UploadAsync(). Я немного новичок в асинхронном программировании, и в документации Google показаны только примеры простых загрузок, поэтому кто-то может показать, как я могу написать приведенную ниже функцию в виде «возобновляемой» версии, которая работает асинхронно с большими размерами файлов (30 МБ + )?

Спасибо.

    public void UpdateFile(string path)
    {
        // Exit if local file doesn't exist.
        if (!System.IO.File.Exists(path))
        {
            MessageBox.Show("Local file couldn't be found!");
        }

        // Show the wait cursor.
        Mouse.OverrideCursor = Cursors.Wait;

        // Get a string value for the mime type.
        string mimeType = GetMimeType(path);

        try
        {
            // Create new file metadata.
            Google.Apis.Drive.v3.Data.File fileMetadata 
                = new Google.Apis.Drive.v3.Data.File();
            fileMetadata.Description = "Updated File";
            fileMetadata.Properties = new Dictionary<string, string>
            { { "status", "editing" } };

            // Get the file's content as a memory stream.
            byte[] byteArray = System.IO.File.ReadAllBytes(path);
            System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);

            // Request a file update.
            FilesResource.UpdateMediaUpload request = 
                driveService.Files.Update(fileMetadata, DriveFileId, stream, mimeType);
            request.Fields = "id";

            request.ProgressChanged += (IUploadProgress progress) =>
            {
                switch (progress.Status)
                {
                    case UploadStatus.Completed:
                        Console.WriteLine("Upload complete.");
                        break;

                    case UploadStatus.Failed:
                        Console.WriteLine("Upload failed.");
                        break;
                }
            };

            request.ResponseReceived += (Google.Apis.Drive.v3.Data.File file) =>
            {
                Console.WriteLine("Updated File ID: " + file.Id);
            };

            request.Upload();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }

        // Restore the default cursor.
        Mouse.OverrideCursor = null;
    }
...