Google Photos API 中的 newMediaItemResults 出现错误

我能够在 上获取上传令牌和 200 状态代码batchCreate。然而,详细的回应是这样的;


{

  "newMediaItemResults": [

    {

      "uploadToken": "CAISqQMAqD4uLZF/uW6bVfUSjQTCRLEgg9ngZv9lS/VqwBw3puvDr2+FGxes9bCQ6VRS8Wd3hdm1sqmZ07CAclBbqR2S+JqRJoOS820km7RHGlZvODMcg1e+U5aFx5I+w59lz0NoyfmaUq4FQ7TqaoTqkW7vgOd2+s5z9qZtAYbqovR7+Az6xfUoZ7wZGwVnDDC0Q9Naf/Qu9qOo3yemZ/jVyE5gMpTj4jtAd+cb4DBCtWLK5cZREJUq18wiB3MqojF5Kv7UOo15dxgRTMR3lib+3s6W+BlBTc1LjZ7WSAr6PX1kA/wgxz74Cpo4neM4WRwPp5E+mSSHCGHpFzPKE8t5xpN71aOrM1d8WoT0jZApnDCAv5ggMUteli9BNSTZSPcZb7AJNUAssUKsDfb0F9NoZedDfrQZUlGH0UqYjj7X74Uk7qMtDCp2XS65LuiUNS2VCkOZydPg2Vtapvpgo/n+h2ib00+e3ci+H1+Zlo7OMH+j99TZof7p7fOdnOcQ2vF+EATdG4p6DatxFvE1op/M8hfvgVAYqV9h6aWUzxIDNKRSy1JKFcM7LO5DIA",

      "status": {

        "code": 3,

        "message": "Failed: There was an error while trying to create this media item."

      }

    }

  ]

}


有人可以向我解释一下我做错了什么吗?


下面是上传功能的代码;


uploadImages(images, token) {

        const promises = Array.from(images).map(image => {

            const formData = new FormData();

            formData.append('media-binary-data', image);

            console.log(formData);

            return axios.post(`${UPLOAD_URL}`, formData, {

                headers: {

                    'Content-Type': "application/octet-stream",

                    'X-Goog-Upload-File-Name': '',

                    'X-Goog-Upload-Protocol': "raw",

                    'Authorization': `Bearer ${token}`,

                },


            }).then((response) => {

                return axios.post('https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate',

                    {

                        "newMediaItems": [

                            {

                                "description": "item-description",

                                "simpleMediaItem": {

                                    "uploadToken": response.data

                                }

                            }

                        ]


湖上湖
浏览 89回答 1
1回答

呼啦一阵风

我相信你的目标如下。您想要使用 axios 和 Javascript 使用 Google Photo API 将图像文件上传到 Google Photo。images是来自. const promises = Array.from(images).map(image => {_document.getElementById("###").files<input type="file" id="files" name="file" multiple>修改要点:从您的错误消息来看,我认为文件可能无法正确上传。在此修改后的脚本中,FormData()未使用。在“mediaItems.batchCreate”方法中,多个文件上传后,它们的文件可以用于一次API调用。请求体的内容类型https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate为application/json。所以在这种情况下,请使用JSON.stringify请求正文。当以上几点反映到您的脚本中时,它会变成如下所示。在此修改中,作为示例情况,添加了 HTML 标签。修改后的脚本:HTML 端:<input type="file" id="files" name="file" multiple> <input type="button" onclick="run()" value="ok">JavaScript 方面:请将您的访问令牌设置为token。function uploadImages(images, token) {  const promises = Array.from(images).map(image => {    return new Promise(r => {      axios.post("https://photoslibrary.googleapis.com/v1/uploads", image, {        headers: {          'Content-Type': "application/octet-stream",          'X-Goog-Upload-File-Name': image.name,          'X-Goog-Upload-Protocol': "raw",          'Authorization': `Bearer ${token}`,        }      }).then((response) => {        r({description: "item-description", simpleMediaItem: {fileName: image.name, uploadToken: response.data}});      });    });  });  return Promise.all(promises).then(e => {    return new Promise((resolve, reject) => {      axios.post('https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate',        JSON.stringify({newMediaItems: e}),        {headers: {'Content-type': 'application/json', 'Authorization': `Bearer ${token}`},      })      .then(resolve)      .catch(reject);    });  });}// This function is run.function run() {  const token = "###";  // Please set your access token.  const files = document.getElementById("files").files;  uploadImages(files, token)  .then(e => console.log(e))  .catch(err => console.log(err));}笔记:在此修改后的脚本中,假设您的访问令牌可用于使用 Google Photo API 将图像文件上传到 Google Photo。请小心这一点。在此修改后的脚本中,作为示例情况,添加了 HTML 标签。在我的环境中,我可以确认上述修改后的脚本有效。但我认为上面的 HTML 标签可能与您的实际情况有所不同。所以请根据您的实际情况修改上面的脚本。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript