MediaItems API Google Фото: batchCreate: NOT_IMAGE: при попытке создать этот элемент мультимедиа произошла ошибка - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь загрузить файл изображения в библиотеку фотографий, используя C #.

Используемые области: https://www.googleapis.com/auth/photoslibrary https://www.googleapis.com/auth/photoslibrary.appendonly

Я создаю uploadToken, используя ниже:

FileStream fS = new FileStream(fullPath, FileMode.Open, FileAccess.Read);
                byte[] b = new byte[fS.Length];
                fS.Read(b, 0, (int)fS.Length);
                fS.Close();
                var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://photoslibrary.googleapis.com/v1/uploads");
                httpWebRequest.ContentType = "application/octet-stream";

                httpWebRequest.Headers.Add("Authorization:" + "Bearer " + auth_Token);
                httpWebRequest.Headers.Add("X-Goog-Upload-File-Name:" + imageName);
                httpWebRequest.Headers.Add("X-Goog-Upload-Protocol:" + "raw");
                httpWebRequest.Method = "POST";
                using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
                {
                    streamWriter.Write(b);
                    streamWriter.Flush();
                    streamWriter.Close();
                }
                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

Здесь я успешно получаю uploadToken.После этого я приступил к созданию mediaItem, как показано ниже:

 httpWebRequest = (HttpWebRequest)WebRequest.Create("https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate");
                    httpWebRequest.ContentType = "application/json";
                    httpWebRequest.Headers.Add("Authorization:" + "Bearer " + auth_Token);
                    httpWebRequest.Method = "POST";
                    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
                    {
                        string albumID = "someid";
                        string itemDesc = "somedesc";
                        string jsonString = "{\"albumId\": \"" + albumID + "\",\"newMediaItems\": [{ \"description\": \"" + itemDesc + "\", \"simpleMediaItem\": { \"uploadToken\": \"" + uploadToken + "\" }}]}";

                        streamWriter.Write(jsonString);
                        streamWriter.Flush();
                        streamWriter.Close();
                    }
                    httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

Теперь в качестве ответа я получаю:

status ": {" code ": 3," message ": "NOT_IMAGE: при попытке создать этот элемент мультимедиа произошла ошибка."}

Я много гуглил, но не смог найти никакого решения для этой проблемы ИЛИ какого-либо блока кода для mediaUpload с помощью Google PhotosБиблиотечный API с примером.

Пожалуйста, подскажите, где я делаю что-то не так.

- неверный способ чтения / записи файловых байтов?

- использование строк Json и записьнеправильно?

Пожалуйста, помогите мне. Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

5 GET UPLOAD TOKEN API работает найти, просто описание неправильно в документации Google.Вместо Base64 вход имеет двоичную форму.Я пробовал в Почтальоне (скриншот ниже):

Получить API Token Upload: https://i.stack.imgur.com/axC7c.png

Загрузить медиа: https://i.stack.imgur.com/5vDnF.png

0 голосов
/ 19 января 2019

Мне удалось выполнить эту работу, выполнив следующие действия при записи изображения в тело на этапе загрузки.Надеюсь, это поможет!

 using (var stream = httpWebRequest.GetRequestStream())
    {
        stream.Write(b, 0, b.Length);
        stream.Flush();
        stream.Close();
    }
...