使用 google 幻灯片 API 添加图像时出现权限问题

Permission problems when adding a image with google slides API

我正在尝试使用 Google 幻灯片向幻灯片添加图像 API。

我的要求

https://slides.googleapis.com/v1/presentations/1nuZwR325hRmmgzyZNMZ0r6bUFanrREWD-t5sF2pGYeo::batchUpdate

有这个负载:

{
  "requests" => [
    {
      "createImage" => {
        "elementProperties" => {
          "pageObjectId" => "SLIDES_API2078288406_0"
        },
        "url" => "https://drive.google.com/uc?id=1Meo1eMAUHV59DNzwjwU_SX4BFds7HZID&export=download"
      }
    }
  ]
}

但失败并显示以下响应:

{
  "error" => {
    "code" => 400,
    "message" => "Invalid requests[0].createImage: Access to the provided image was forbidden.",
    "status" => "INVALID_ARGUMENT"
  }
}

即使检查文件权限 returns 此响应:

{
 "kind": "drive#permissionList",
 "permissions": [
  {
   "kind": "drive#permission",
   "id": "anyoneWithLink",
   "type": "anyone",
   "role": "reader",
   "allowFileDiscovery": false
  },
  {
   "kind": "drive#permission",
   "id": "14156222269725841761",
   "type": "user",
   "role": "owner"
  }
 ]
}

尽管我使用 Mojo::UserAgent 来执行此操作,但(对我而言)这似乎是一个与语言无关的问题(因此缺少“perl”标签)。无论如何,下面的代码,以防万一:

helper 'google_add_image_to_slide_p' => sub {
    my $c = shift;
    my $img_id   = shift;
    my $pres_id = shift;
    my $page_id = shift;

    $c->log->info("adding image $img_id to page $page_id");

    my $update = {
              requests => [
                       {
                        "createImage" =>
                           {
                               elementProperties => { pageObjectId => $page_id },
                               url => "https://drive.google.com/uc?id=1Meo1eMAUHV59DNzwjwU_SX4BFds7HZID&export=download",
                           }
                       }
                  ]
         };
    $c->app->ua->post_p('https://slides.googleapis.com/v1/presentations/' . $pres_id . ':batchUpdate', json => $update);
};

所以问题是:为什么我收到无效的请求响应?

https://drive.google.com/uc?id=1Meo1eMAUHV59DNzwjwU_SX4BFds7HZID&export=download

似乎是来自 google 驱动器文件的网络link下载link。为了让您访问它,您必须有权访问文件本身。你不能只发送这个 link api 将无法阅读它。

将文件上传到不包含附加权限的位置。