簡體   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