为了账号安全,请及时绑定邮箱和手机立即绑定

Google Drive API 下载 jpg

Google Drive API 下载 jpg

PHP
慕码人2483693 2023-04-15 14:10:36
我正在尝试使用 php 将 google drive jpg 下载到服务器,以便将其保存为可用的 jpg,例如手动下载时。我可以从 filemeta 获取 getWebContentLink 并保存扩展名为 .jpg 的“a”文件:$filemeta = $this->service->files->get($id,[    "fields"=>"*"]);$filename = public_path().'/test.jpg';$url=$filemeta->getWebContentLink();file_put_contents($filename, fopen($url, 'r'));然而,这不是真正的 jpg,确实无法使用<img src="/test.jpg" />元素显示。设置:public function __construct() {        $this->getClient();        $this->service= new Google_Service_Drive($this->client);    }    /**     * @return Google_Client     * @throws \Google_Exception     */    protected function getClient() {        $client = new Google_Client();        $client->setApplicationName('Google Drive API PHP Quickstart');        //20200521$client->setScopes(Google_Service_Drive::DRIVE_METADATA_READONLY);       $client->setScopes(Google_Service_Drive::DRIVE_READONLY);       // https://www.googleapis.com/auth/drive.readonly        $client->setAuthConfig(base_path().'/apicredentials/google/credentials.json');        $client->setAccessType('offline');        $client->setPrompt('select_account consent');        // Load previously authorized token from a file, if it exists.        // The file token.json stores the user's access and refresh tokens, and is        // created automatically when the authorization flow completes for the first        // time.        $tokenPath = base_path().'/apicredentials/google/token.json';        if (file_exists($tokenPath)) {            $accessToken = json_decode(file_get_contents($tokenPath), true);            $client->setAccessToken($accessToken);        }        // If there is no previous token or it's expired.        if ($client->isAccessTokenExpired()) {            // Refresh the token if possible, else fetch a new one.            if ($client->getRefreshToken()) {                $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());            }                 }            }
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这个答案怎么样?

问题和解决方法:

为了webContentLink从外部检索文件内容,需要使用访问令牌或文件需要公开共享。所以在你的脚本中,我认为创建的文件是登录页面的 HTML 数据。

那么以下解决方法如何?

  1. webContentLink使用访问令牌下载文件内容。

  2. 首先,在 Google Drive 上公开共享该文件。然后,使用您当前的脚本下载文件内容。

  3. 使用 Drive API 直接下载文件内容。在这种情况下,修改后的脚本如下。如果您使用https://www.googleapis.com/auth/drive.metadata.readonlyas 范围,请修改为https://www.googleapis.com/auth/drive.readonly.

$content = $this->service->files->get($id, array("alt" => "media"));

$filename = public_path().'/test.jpg';

file_put_contents($filename, $content->getBody());


查看完整回答
反对 回复 2023-04-15
  • 1 回答
  • 0 关注
  • 66 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信