Используя документацию по 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;
}