Как отправить двоичные данные в объект запроса Gaxios с Oauth2Client в google-auth-library-nodejs - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь загрузить фотографии в аутентифицированную учетную запись с помощью google-auth-library-nodejs, в основном следуя примеру здесь .Я успешно аутентифицировал клиента с помощью OAuth2Client и делаю сначала запрос с изображением, а затем создаю элемент мультимедиа.Однако я продолжаю получать эту ошибку из POST-запроса mediaItems: batchCreate.

media item creation status:  { code: 3,
  message:
   'NOT_IMAGE: There was an error while trying to create this media item.' }
{ expiry_date: 1551232184753,
  scopes:
   [ 'https://www.googleapis.com/auth/photoslibrary.appendonly' ],
  azp:
   '279811607028-ne3ln378urka8e6gn1nknag92uv7qhvs.apps.googleusercontent.com',
  aud:
   '279811607028-ne3ln378urka8e6gn1nknag92uv7qhvs.apps.googleusercontent.com',
  exp: '1551232184',
  access_type: 'offline' }

Я подозреваю, что это связано с тем, что параметр объекта Gaxios в Oauth2Client.request кодирует данные запроса вbase64, в то время как фотографии api docs запрашивают двоичные данные.Есть ли способ переопределить это поведение в объекте Gaxios?Я мог бы сделать обычный почтовый запрос, но я хотел бы сохранить преимущества аутентификации google-auth-library.Вот мой код.

const oAuth2Client = await getAuthenticatedClient();

let image = fs.readFileSync(path.join(__dirname, '../diagrams/camera_mod_measurements.jpg') );

// Make a simple request to the People API using our pre-authenticated client. The `request()` method
// takes an GaxiosOptions object.  Visit https://github.com/JustinBeckwith/gaxios.
const requestParams = {
    url: "https://photoslibrary.googleapis.com/v1/uploads",
    method: "POST",
    headers: {
        "Content-Type": "application/octet-stream",
        "X-Goog-Upload-File-Name": "test1",
        "X-Goog-Upload-Protocol": "raw"
    },
    data: {
        MEDIA_BINARY_DATA: image
    },
    params: {

    },
}
const uploadToken = await oAuth2Client.request(requestParams);
console.log("UPLOAD TOKEN:", uploadToken.data);

const mediaItemRequest = {
    url: "https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate",
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    },
    data: {
        "newMediaItems": [
            {
                "description": "TEST",
                "simpleMediaItem": {
                    "uploadToken": uploadToken.data
                }
            }
        ]
    }
};

const mediaItemResponse = await oAuth2Client.request(mediaItemRequest);
console.log(mediaItemResponse.data);
console.log("media item creation status: ", mediaItemResponse.data.newMediaItemResults[0].status);

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...