繁体   English   中英

“失败:尝试创建此媒体项目时出错。”

[英]“Failed: There was an error while trying to create this media item.”

我正在尝试使用 google api 在 Google Photos 上上传照片,但我总是收到此错误:

"status":{"code":3,"message":"Failed: There was an error while trying to create this media item."}}

我认为问题在于我获取照片二进制数据的方式。

在此代码中,我遵循谷歌照片 api 开发人员文档,它说,在获得授权后,要: 1- 将原始字节上传到 Google 服务器:获取上传令牌 2- 使用上传令牌创建媒体项目。

这是我的节点 js 代码:

const photo = fs.readFileSync("fbimages/"+req.session.id_client+"/Prague/2020-05-30T17:29:14+0000_0.png", {
            'encoding': 'binary',
            'flag' : 'r'
        });


 var url= 'https://photoslibrary.googleapis.com/v1/uploads';
 var headers= {
     'Authorization': 'Bearer '+token,
     'Content-type': 'application/octet-stream',
     'X-Goog-Upload-Content-Type': 'image/png',
     'X-Goog-Upload-Protocol': 'raw',
     'X-Goog-Upload-File-Name': "2020-05-30T17:29:14+0000_0.png",
 };
 var body= photo

 request({
      url: url,
      method:'POST',
      headers: headers,
      rejectUnauthorized: false,
      body: JSON.stringify(body)
  }, function(error, response, body1){
      if(error)
      {
        console.log(error);
      }
      else
      {
         var upToken = body1.toString();

         console.log(upToken);

         var url= 'https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate';
         var headers= {
             'Authorization' : 'Bearer '+token,
             'Content-type': 'application/json',
         };
         var body= {
             'newMediaItems': [
                 {
                   'description': 'Prague',
                   'simpleMediaItem': {
                         'fileName': 'prova',
                         'uploadToken': upToken,
                    }
                 }
             ]
         };
         request({
             url: url,
             method: 'POST',
             headers: headers,
             rejectUnauthorized: false,
             body: JSON.stringify(body),

           }, function(error, response, body){
              if(error)
              {
                 console.log(error);
               }
               else
               {
                  res.send(JSON.parse(body));
                }
          });
   }});

请帮助我,如果有人有任何想法!

这个改装怎么样?

修改点:

  • 我认为encoding: "binary"不是必需的。
    • 在这种情况下,`const photo = fs.readFileSync("fig1.png", { flag: "r" }); and可以使用 const photo = fs.readFileSync("fig1.png");`。
  • 请将body: JSON.stringify(body)修改为 const photo const photo = fs.readFileSync("fig1.png", { flag: "r" }); .

当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

从:
 const photo = fs.readFileSync("fbimages/"+req.session.id_client+"/Prague/2020-05-30T17:29:14+0000_0.png", { 'encoding': 'binary', 'flag': 'r' }); var url= 'https://photoslibrary.googleapis.com/v1/uploads'; var headers= { 'Authorization': 'Bearer '+token, 'Content-type': 'application/octet-stream', 'X-Goog-Upload-Content-Type': 'image/png', 'X-Goog-Upload-Protocol': 'raw', 'X-Goog-Upload-File-Name': "2020-05-30T17:29:14+0000_0.png", }; var body= { 'media-binary-data': photo } request({ url: url, method:'POST', headers: headers, rejectUnauthorized: false, body: JSON.stringify(body) }, function(error, response, body1){
至:
 const photo = fs.readFileSync("fbimages/"+req.session.id_client+"/Prague/2020-05-30T17:29:14+0000_0.png", { flag: "r" }); var url = "https://photoslibrary.googleapis.com/v1/uploads"; var headers = { Authorization: "Bearer " + token, "Content-type": "application/octet-stream", "X-Goog-Upload-Content-Type": "image/png", "X-Goog-Upload-Protocol": "raw", "X-Goog-Upload-File-Name": "2020-05-30T17:29:14+0000_0.png", }; request( { url: url, method: "POST", headers: headers, rejectUnauthorized: false, body: photo, }, function (error, response, body1) {

笔记:

  • 在此修改中,假设您的token可用于此 API。 请注意这一点。
  • 当您想将上传的图片直接放入相册时,请在请求https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate albumId

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM