Иногда я получаю нулевое значение ResponseBody при отправке некоторых файлов на диск Google.
Это происходит случайным образом, большинство файлов отправляются, но 1 из 10 файлов возвращает нулевое значение ResponseBody.
Я искал это, но есть только вопросы о том, чтобы получить ответ null здесь и здесь
Мой код:
await UploadFileAsync(...); //exception here
public Task<string> UploadFileAsync(DriveService driveService, string LocalPath, string gdriveFileName, string GDriveFolder, IProgress<long> progress)
{
return Task.Run(() =>
{
var folderId = GetDirectoryOrCreateIfNotExist(driveService, GDriveFolder);
var file = CreateGDriveFile(gdriveFileName, folderId);
IUploadProgress result = null;
FilesResource.CreateMediaUpload request;
using (var stream = new System.IO.FileStream(LocalPath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
request = driveService.Files.Create(file, stream, "image/jpeg");
request.ChunkSize = ResumableUpload.MinimumChunkSize * 4;
request.ProgressChanged += (p) => progress.Report(p.BytesSent * 100 / stream.Length);
request.Fields = "id, webContentLink, name";
result = request.Upload();
}
if (request == null)
throw new Exception("O request é nulo");
if (request.ResponseBody == null)
throw new Exception("O ResponseBody é nulo"); //Throw here sometimes
var fileUploaded = request.ResponseBody;
return fileUploaded.WebContentLink;
});
}
private string GetDirectoryOrCreateIfNotExist(DriveService driveService, string folderName)
{
var folder = GetFolderIdByName(driveService, folderName).FirstOrDefault();
if (folder == null)
{
folder = CreateGDriveDirectory(driveService, folderName);
AplyPermissionToFile(driveService, folder);
}
return folder;
}
private File CreateGDriveFile(string fileName, string folderName = null)
{
var file = new File()
{
Name = fileName
};
if (folderName != null)
{
file.Parents = new List<string>
{
folderName
};
}
return file;
}
Почему ResponseBody имеет значение null? и Почему это происходит только несколько раз?
Обновление:
Я редактирую UploadFileAsyn c (), чтобы проверить UploadStatus, теперь я получаю :
The service drive has thrown an exception: Google.GoogleApiException: Google.Apis.Requests.RequestError
Internal Error [500]
Errors [
Message[Internal Error] Location[ - ] Reason[internalError] Domain[global]
]
обновленный код: (см. Result.Status! = UploadStatus.Completed)
public Task<string> UploadFileAsync(DriveService driveService, string LocalPath, string gdriveFileName, string GDriveFolder, IProgress<long> progress)
{
return Task.Run(() =>
{
var folderId = GetDirectoryOrCreateIfNotExist(driveService, GDriveFolder);
var file = CreateGDriveFile(gdriveFileName, folderId);
IUploadProgress result = null;
FilesResource.CreateMediaUpload request;
using (var stream = new System.IO.FileStream(LocalPath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
request = driveService.Files.Create(file, stream, "image/jpeg");
request.ChunkSize = ResumableUpload.MinimumChunkSize * 4;
request.ProgressChanged += (p) => progress.Report(p.BytesSent * 100 / stream.Length);
request.Fields = "id, webContentLink, name";
result = request.Upload();
}
if (result.Status != UploadStatus.Completed) //check status, now it's throwing here sometimes
throw result.Exception;
if (request == null)
throw new Exception("O request é nulo");
if (request.ResponseBody == null)
throw new Exception("O ResponseBody é nulo");
var fileUploaded = request.ResponseBody;
return fileUploaded.WebContentLink;
});
}
Может кто-нибудь мне помочь?