JSON API: выполнение простой загрузки UWP - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь загрузить файл в Google Cloud API.Поскольку клиентские библиотеки для диска Google несовместимы с UWP и не позволяют выполнять сборку проекта в версии выпуска для приложений 64x, я пытаюсь использовать JSON API и выполнить загрузку по запросу POST, выполнив шаги в этой статье .Но проблема в том, что загруженный файл имеет размер 0 МБ и не содержит никакой информации.

Ответ:

"kind": "storage#object",
"id": "[bucketname]/6c2b78ef-be4d-46b1-a641- 
 aab3eb5ee403.pdf/[generationId]",
"selfLink": 
"https://www.googleapis.com/storage/v1/b/[bucketname]/o/6c2b78ef-be4d- 
46b1-a641-aab3eb5ee403.pdf",
"name": "6c2b78ef-be4d-46b1-a641-aab3eb5ee403.pdf",
"bucket": [bucketname],
"generation": [generationId],
"metageneration": "1",
"timeCreated": "2018-10-20T13:48:47.014Z",
"updated": "2018-10-20T13:48:47.014Z",
"storageClass": "MULTI_REGIONAL",
"timeStorageClassUpdated": "2018-10-20T13:48:47.014Z",
"size": "0",
"md5Hash": "1B2M2Y8AsgTpgAmY7PhCfg==",
"mediaLink": 
"https://www.googleapis.com/download/storage/v1/b/[bucketname]/o/6c2b78ef- 
be4d-46b1-a641-aab3eb5ee403.pdf?generation=[generationId]&alt=media",
"crc32c": "AAAAAA==",
"etag": "CIyOyLuUld4CEAE="

Как видите, размер файла равен 0. Когда я пытаюсь открыть его, я получаю сообщение о том, что файл поврежден.

Вот мойКод C #:

var destinationSource = $"https://www.googleapis.com/upload/storage/v1/b/{rootBacketName}/o?key={key}&uploadType=media&name={fileName}";
HttpClient httpClient = new HttpClient();
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, destinationSource);
Task<HttpResponseMessage> httpRequest = httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseContentRead, CancellationToken.None);
requestMessage.Content = new ByteArrayContent(bytes);
requestMessage.Content.Headers.Add("Content-Type", contentType);
requestMessage.Content.Headers.Add("Content-Length", bytes.Length.ToString());

Любая помощь будет оценена.Спасибо

1 Ответ

0 голосов
/ 20 октября 2018

Проблема в том, что вы выполняете запрос перед установкой Content:

var destinationSource = $"https://www.googleapis.com/upload/storage/v1/b/{rootBacketName}/o?key={key}&uploadType=media&name={fileName}";
HttpClient httpClient = new HttpClient();
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, destinationSource);    
requestMessage.Content = new ByteArrayContent(bytes);
requestMessage.Content.Headers.Add("Content-Type", contentType);
requestMessage.Content.Headers.Add("Content-Length", bytes.Length.ToString());
var response = await httpClient.SendAsync(
      requestMessage, HttpCompletionOption.ResponseContentRead, CancellationToken.None);

Я также использую `await, чтобы дождаться фактического завершения запроса, прежде чем продолжить.

...