当前位置: 首页 > 知识库问答 >
问题:

无法更新Google驱动器文件

冯德宇
2023-03-14
$this->drive()
    ->files
    ->update(
        $this->report->getId(),
        $this->report,  // This is a Google_Service_Drive_DriveFile instance
        [
            'uploadType' => 'multipart',
            'data' => file_get_contents($this->getLocalReportLocation())
        ]
    );

我收到以下例外情况:

调用修补程序https://www.googleapis.com/upload/drive/v3/files/abcde4fghvxztkvoskvetjktne0?uploadtype=multipart:(403)资源正文包含不可直接写入的字段。

共有1个答案

单于皓轩
2023-03-14

显然,该问题是由$this->报告引起的,我通过以下方式获得该报告:

// Fetch the latest synchronized report
$latestReport = $this->drive()
    ->files
    ->listFiles([
        'orderBy' => 'modifiedTime',
        'q'       => '\''.$this->userEmail.'\' in owners AND name contains \'AppName\'',
    ])
    ->getFiles()[0];

$this->report = $this->drive()
    ->files
    ->get($latestReport->id);

可能$this->report(它是\google_service_drive_drivefile的实例)包含一些字段,这些字段在设置并传递给update()方法时会导致问题。

我可以通过将\google_service_drive_drivefile的新实例传递给update()方法来解决这个问题,如下所示:

$this->drive()
    ->files
    ->update($this->report->getId(), (new \Google_Service_Drive_DriveFile()), [
        'uploadType' => 'multipart',
        'data' => file_get_contents($this->getLocalReportLocation()),
        'mimeType' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    ]);
 类似资料:
  • 基于@Nvico很棒的答案,我能够将文件上传到谷歌驱动器,问题是答案上的代码每次都会创建一个新文件,有没有办法给定一个已经创建的文件ID来直接更新其内容(使用文件:更新api)而不创建一个新的? 目前我的解决方案是使用文件:删除api每次我想更新文件以删除旧文件,然后使用@Nvico代码创建一个新文件

  • 我遵循了这个基本教程,但我得到: 什么应该包含重定向URI?

  • 我对谷歌驱动器有问题。 链接前: 工作很好,直到现在:-(但现在它不再工作了。结果没有找到错误404,但文件存在。我可以上传文件和轻松构建下载URL。 例如,公共文档。 我如何才能下载未经授权的文件,我需要直接链接。 谢谢!!!

  • 我尝试的是下面的,但不是工作 从谷歌REST链接,它显示的例子如下,如何运行这个?

  • 我们还需要能够生成直接链接到他们的照片,视频等。 我们已经成功地以这种方式与Dropbox集成,并希望提供谷歌驱动器作为替代方案。这些场景在Google Drive上可能吗?

  • 有人能帮我知道如何获得这些链接授权吗?