javascript - 无法使用 NodeJS 使用 Google Photos API 上传图像
问题描述
我在NodeJS中构建了应用程序,假设使用谷歌照片API将图片上传到谷歌照片,我正在成功进行身份验证部分,当我尝试上传图片时遇到问题我收到上传令牌没有问题但是当我尝试时使用 mediaItems:batchCreate 它返回:
"status": {
"code": 3,
"message": "Failed: There was an error while trying to create this media item."
}
这是我将图像转换为 base64 的代码:
var base64str = fs.readFileSync('1.jpg', 'base64');
这是我得到响应上传令牌的请求:
request({
method: 'post',
headers: {
'content-type' : 'application/octet-stream',
'Authorization': `Bearer ${userToken}`,
'X-Goog-Upload-File-Name' : '1.jpg',
'X-Goog-Upload-Protocol' : 'raw'
},
url: `https://photoslibrary.googleapis.com/v1/uploads`,
rejectUnauthorized: false,
body: base64str
}, function(err,response,body) {
console.log(body);
});
到目前为止,我没有问题,因为(正文)响应是上传令牌并且我收到了它。现在,当我想去第 2 步请求 mediaItems:batchCreate 时,代码如下:
let reqObject = {
newMediaItems: [
{
description: "Test Image Uploading",
simpleMediaItem: {
uploadToken: body //Body is the upload token received from prev request
}
}
]
};
let reqObjectString = JSON.stringify(reqObject);
request({
method: 'post',
headers: {
'content-type' : 'application/json',
'Authorization': `Bearer ${userToken}`,
},
url: `https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate`,
rejectUnauthorized: false,
body: reqObjectString
}, function(err,response,result) {
console.log(result);
});
这里的预期结果应该是成功上传媒体,但我总是得到这个响应:
{
"newMediaItemResults": [
{
"uploadToken": "CAISmQMASsyg4MwSgB2y46/QI2yAAfw/uSeHZaiwGaskaT9J3SEvOtBg4bkOb9Fd0WMhE5OML8aMJMGZWNyC3Di/woTjLGD/VJMtKBk7bg1ZyK5CA+92vk0mjUWVR2LQhhTkEs02aHRr6EkCER3rxk3AqkhC+bxTIViLerUeoKigdlqozrEJXyCLM5U+Eqjdidi0e0hEFeLqs8Yz0V8YpyWQnN+zZUp/+R4pVT9fPXUOyNlsTj5OcMLrtC3Z/W9YnKhQA0O8io8LtmMBJTf04v3YPEtoNvJTd+k5Ux7qWQYJCS60V1R+hPl76jlryos3gnVaaCxHGH/TIMmtwo2zDH+vXTyktMhr82hdMON3Mm2PCfSbJawCLuHSNND9vojO11FEs7LVXAfY1UDDzVXwv4VV8tG9F3tQVI8/4YlkR+KJUjaX6/E4ZFWx67E+swqh16HN1RXXU211eCl36mPxsX35IGPEwvhpZ89LKfk+NU1fVuHB+pNLMNQ+mZOkKs0v6VLcN+nyMpOwjAstg4QUSJdCP+virY1a2uGKwYJh",
"status": {
"code": 3,
"message": "Failed: There was an error while trying to create this media item."
}
谁能帮忙,提前谢谢
解决方案
你的评论完全正确。google photos API 需要二进制格式的媒体,而不是 base64 格式的媒体。
我使用 React.js 和 FileReader 来阅读媒体。我不得不使用:
const reader = new FileReader()
reader.readAsArrayBuffer()
获取数组缓冲区,然后图像成功上传。
推荐阅读
- python - 处理 pdf 中的图像信息和路径
- linux - 使用 FTP 下载特定文件名
- abaqus - Abaqus,边界条件如何影响规定的材料响应?
- ios - SwiftUI:@State 已修改,但在阅读之后的行时看似未更改
- java - 带有 POSTGRES 的 JBOSS EAP6 上的 EJB3 eclipseLink 没有在数据库中插入
- android - android SDK上的万事达卡网关更新会话不起作用
- c# - Xamarin Forms 对不同的构建配置使用不同的资源字典
- python - Python Keras TypeError('预期的二进制或 unicode 字符串,得到 %r' % TypeError: 预期的二进制或 unicode 字符串,得到 1
- javascript - 打开和关闭模式时自动播放和停止
- angular - 如何正确使用排气映射Angular 7