如何使用 php 将 google 驱动器下载文件写入目录

2024-04-18

我正在尝试使用下面的代码将谷歌驱动器文件下载到目录中。当我运行代码时,它仅按照下面的代码在浏览器上打开文件的内容

// 验证谷歌驱动器放在这里

$file = $service->files->get($fileId);


  $downloadUrl = $file->getDownloadUrl();
    $request = new Google_Http_Request($downloadUrl, 'GET', null, null);
    $httpRequest = $service->getClient()->getAuth()->authenticatedRequest($request);
   echo $content= $httpRequest->getResponseBody();

以下是我尝试将其下载到名为“目的地”的目录的方法

// 打开文件句柄进行输出。

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

// Open file handle for output.

$handle = fopen("/download", "w+");

// Until we have reached the EOF, read 1024 bytes at a time and write to the output file handle.

while (!$content->eof()) {
        fwrite($handle, $content->read(1024));
}

fclose($handle);
echo "success";

这是我得到的错误

致命错误:未捕获错误:在 C:\xampp\htdocs\download.php 中的字符串上调用成员函数 eof()


  • 您想要使用 google/apiclient 和 php 将文件从 Google Drive 下载到特定目录。
  • 您想要下载的文件是您自己的和/或与您共享的。

如果我的理解是正确的,那么这个修改怎么样?

修改点:

  • Please use getBody() for $content.
    • $content->getBody()->eof()
    • $content->getBody()->read(1024)

修改后的脚本:

在此修改中,Drive API 也会检索文件名并用于保存下载的文件。如果您不想使用它,请删除它的脚本。

$fileId = "###"; // Please set the file ID.

// Retrieve filename.
$file = $service->files->get($fileId);
$fileName = $file->getName();

// Download a file.
$content = $service->files->get($fileId, array("alt" => "media"));
$handle = fopen("./download/".$fileName, "w+"); // Modified
while (!$content->getBody()->eof()) { // Modified
    fwrite($handle, $content->getBody()->read(1024)); // Modified
}
fclose($handle);
echo "success";
  • 在上面的脚本中,下载的文件保存到目录./download/.

Note:

  • When the method of Files: get of Drive API, the files except for Google Docs (Google Spreadsheet, Google Document, Google Slides and so on) can be downloaded. If you want to download Google Docs, please use the method of Files: export. Please be careful this.
    • 因此,在上面修改后的脚本中,它假设您正在尝试下载除 Google Docs 之外的文件。

参考:

  • PHP 快速入门 https://developers.google.com/drive/api/v3/quickstart/php
  • 下载文件 https://developers.google.com/drive/api/v3/manage-downloads
  • 文件:获取 https://developers.google.com/drive/api/v3/reference/files/get
  • 文件:导出 https://developers.google.com/drive/api/v3/reference/files/export

如果我误解了你的问题并且这不是你想要的结果,我深表歉意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 php 将 google 驱动器下载文件写入目录 的相关文章

  • 保护登录和评论表单免受 CSRF 攻击

    我读过很多关于CSRF保护的文章 这个不错 http seclab stanford edu websec csrf csrf pdf 以及关于SO的各种问题 但它们似乎都没有足够的信息来回答我的问题 我正在开发自己的 CMS 我想保护我的
  • 如何从 laravel 中给定的 lat long 获取附近的法院?

    我想在雄辩的 ORM 中给定的 lat long 的基础上获得篮球场 我试图得到这个 但在这里我得到了这个错误 Call to undefined function App Http Controllers Api RADIANS 有没有办
  • PHP 中字符串限制为前 5 个单词或前 42 个字符

    如果我在 PHP 中有一个字符串 该字符串在 PHP 中是令人讨厌的长字符串 并且我想缩短它 然后向其添加一些内容 我想将其缩短为前 6 个单词或 42 个字符 以较短者为准 然后在缩短后附加一个 唯一不会被缩短且不添加 的情况是它最初少于
  • 拒绝访问 .htaccess 中的 .ini 文件是否安全?

    我的 php Web 应用程序中有一个包含敏感信息的 ini 文件 我使用 htaccess 文件拒绝访问它
  • 高级自定义字段 – 具有多个输入的自定义字段类型

    我正在尝试为 ACF 创建一个新的字段类型 其中包含多个输入或存储值数组 原因是我希望为一组输入字段提供一些交互性和自定义布局 我按照这个教程http www advancedcustomfields com resources tutor
  • php 解码 JSON 获取值

    我正在尝试解码 JSON 格式 我要发送的是 id 123 name John surname Smith department 3 我正在通过 Postman 发送带有数据的 POST 如图所示 所以 这是我想要解码的数据 data se
  • 使用 JavaScript 或 PHP 自动检测用户当前本地时间

    我经常需要根据用户的信息或受用户的影响来显示信息actual本地时间因时区而异 是否有可靠的方法来获取用户的当前时间和 或时区 关键的问题 服务器端代码基于网站主机或用户的ISP 客户端代码基于用户的系统时钟 太容易被操纵 关键问题 是否有
  • 阿拉伯语的 tcpdf 将字符显示为问号 '?????? ???'

    我想创建一个阿拉伯语 pdf 与我的 ms Execl 格式的文件相同 在 php 中使用 tcpdf 创建 pdf 时 阿拉伯字符显示为 分数 这些字符是从我的 Excel 文件中复制的 htmlcontent2 span color 0
  • PHP imap_search:Microsoft Exchange 邮件服务器上的 UTF-8/非 ASCII 字符

    我想从以下位置获取电子邮件outlook office365 com使用 IMAP 和 PHP 由于大多数电子邮件包含非 ASCII 字符 例如 I use UTF 8 in my imap search 功能 imap search mb
  • 将 Mailjet API v3 包装器集成为 Codeigniter 库

    我怎样才能整合Mailjet API PHP 包装器 https github com mailjet mailjet apiv3 php no composer作为库安装到我的 Codeigniter 安装中 是不是把内容放进去那么简单存
  • PHP 未定义索引/未定义偏移解决方法[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 注意 未定义的变量 和 注意 未定义的索引 https stackoverflow com questions 4261133 php notice undefined variable an
  • 尝试使用 SwiftMailer 和 Sendgrid 发送电子邮件时出现致命错误

    我在尝试使用 swiftmailer 和 sendgrid smtp 发送电子邮件时收到此错误 致命错误 未捕获异常 Swift TransportException 消息 预期响应代码 250 但收到代码 消息 这是我的代码 hdr ne
  • 致命错误:发送表单时未找到“App\Http\Controllers\Input”类

    我正在尝试发送一封包含来自 Laravel 应用程序的表单的电子邮件 当你点击提交时 它会抛出上述错误 致命错误 找不到类 App Http Controllers Input 不知道为什么 因为我没有 也不知道我需要有一个输入控制器 或者
  • 不可编辑的文本字段

    我是新来的YII 我想知道文本字段是否YII可以设为不可编辑 如果是的话有人可以回答吗 我按照下面的方法 这是行不通的 Use readonly instead http www w3 org TR html401 interact for
  • 使用curl作为fgetcsv的fopen文件资源的替代品

    是否可以制作curl 访问url并将结果作为文件资源 就像 fopen 是如何做到的 我的目标 解析 CSV 文件 将其传递给 fgetcsv 我的障碍 fopen被禁用 我的代码块 在 fopen 中 url http download
  • 作曲家安装不断消耗所有 RAM 内存

    在我正在开发的 Symfony 2 7 项目中 我通过 Composer 1 6 5 使用了很多包 几天后我无法再添加新包或重建composer lock 它总是内存不足 当我尝试添加新包时 我开始注意到这个问题 但问题不在于那个包 因为作
  • 不使用函数检测字符串结尾

    如何找出 PHP 字符串的结尾 我有一项任务 无需任何函数即可识别字符串长度 我知道 PHP 中的所有字符串都以空字节结尾 0 但我不知道最后一个符号之后的字符串元素 例如 这将不起作用 while a length 如何在不使用任何函数的
  • CodeIgniter - 为什么使用 xss_clean

    如果我正在清理我的数据库插入 并且还转义我编写的 HTMLhtmlentities text ENT COMPAT UTF 8 是否还需要使用 xss clean 过滤输入 它还有什么其他好处 xss clean http docs gip
  • 通过字段名称以编程方式获取 ACF 字段键

    我需要在 WordPress 的高级自定义字段插件 ACF 中按字段名称获取字段键 该字段被分配给一个帖子 我正在帖子的循环中 我想使用字段名称以编程方式获取字段键 这样做的原因是因为我正在创建一个表单 其中字段名称 选项 将保持不变 但在
  • 通过页面打开 mysql 连接是完全鲁莽的吗?

    当查询数据库时 是否会感到极度偏执 每次必须完成新查询时 我都会打开和关闭 mysql 连接 我担心 尤其是启用 ajax 的页面 这会导致性能大幅下降 我应该继续使用此方法 还是至少在每个页面 而不是每个查询 中打开和关闭连接一次 顺便说

随机推荐