Я пытаюсь загрузить фотографии в аутентифицированную учетную запись с помощью 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);
Спасибо!