В настоящее время я разрабатываю среду с плохой сетевой связью. Мое приложение помогает автоматически загружать необходимые файлы Google Диска для пользователей. Он работает достаточно хорошо для небольших файлов (от 40 КБ до 2 МБ), но слишком часто используется для больших файлов (9 МБ). Я знаю, что размер этих файлов может показаться небольшим, но с точки зрения сетевой среды моего клиента API Google Диска постоянно терпит неудачу с файлом 9 МБ.
Я пришел к выводу, что мне нужно загружать файлы в более мелкие куски байтов, но я не понимаю, как это сделать с помощью API Google Диска. Я читал этот снова и снова, и я пробовал следующий код:
// with the Drive File ID, and the appropriate export MIME type, I create the export request
var request = DriveService.Files.Export(fileId, exportMimeType);
// take the message so I can modify it by hand
var message = request.CreateRequest();
var client = request.Service.HttpClient;
// I change the Range headers of both the client, and message
client.DefaultRequestHeaders.Range =
message.Headers.Range =
new System.Net.Http.Headers.RangeHeaderValue(100, 200);
var response = await request.Service.HttpClient.SendAsync(message);
// if status code = 200, copy to local file
if (response.IsSuccessStatusCode)
{
using (var fileStream = new FileStream(downloadFileName, FileMode.CreateNew, FileAccess.ReadWrite))
{
await response.Content.CopyToAsync(fileStream);
}
}
Однако результирующий локальный файл (из fileStream
) по-прежнему является полноразмерным (то есть 40 КБ файл для файла диска 40 КБ и 500 внутренних ошибок сервера для 9 МБ файла). На стороне sidenote я также экспериментировал с ExportRequest.MediaDownloader.ChunkSize
, но из того, что я наблюдаю, это только изменяет частоту, с которой вызывается обратный вызов ExportRequest.MediaDownloader.ProgressChanged
(т.е. Обратный вызов будет запускать каждые 256 КБ, если ChunkSize
установлено на 256 * 1024).
Как я могу продолжить?