【问题标题】:thumbnail of document uploaded in google drive in laravel在 laravel 的谷歌驱动器中上传的文档的缩略图
【发布时间】:2021-06-07 15:51:57
【问题描述】:

我有一个文件上传项目,用户在该项目中上传将保存在谷歌驱动器中的文档 doc 或 pdf。我希望在上传期间获得缩略图,或者可以将文档的第一页说成图像并将其保存在数据库中。

这是我的 web.php

Route::post('/upload', function (Request $request) {
    $name=$request->file("thing")->getClientOriginalName();
    Storage::disk("google")->putFileAs("",$request->file("thing"),$name);
    $url=Storage::disk('google')->url($name);
    DB::insert('insert into books (Title, Url) values (?,?)', [$name,$url]);
    
    dd('uploaded');
})->name("upload");

我想将缩略图保存在数据库中。我怎样才能得到缩略图。我搜索了但找不到任何方法。

如果我得到谷歌驱动文件的 URL,然后在普通 library.php 文件中编写获取文件和 mata 数据的代码,我是否必须再次连接到谷歌驱动 API 或者在 laravel 项目中这样做就足够了?

我有 library.php,其中 laravel 项目出现在按钮单击我上传文件的位置。

如果在 laravel 中无法获取缩略图,那么任何人都可以告诉 php.ini 的代码。我尝试了很多,但在stakeoverflow中找不到或找到一些示例,但我不知道在php文件中在哪里实现驱动API的那些get函数。

listFiles: function (folderId, onData, onError) {

    drive.files.get({
    auth: jwtClient,
    fileId: fileId,
    fields : "thumbnailLink"
})

我找到的示例代码,但我不知道在哪里或在 library.php 中,我是否需要连接到 API 以及如何连接。

我找了很多,但没有找到任何东西,请帮忙。

【问题讨论】:

  • 我能问一下我对你的问题的理解吗?您想下载上传到 Google Drive 中的文件的缩略图。在您的情况下,您已经知道文件的文件 ID。您想使用 googleapis for PHP 检索 Google Drive 上文件的文件元数据。我的理解正确吗?顺便问一下,你的问题中下面的脚本是什么?
  • 是的,你说得对,下面的脚本实际上是当我搜索我得到这个解决方案的方法时,但我不知道如何实现这个如果你知道解决方案请帮助
  • 感谢您的回复。从lower script is actually when I searched for the method I got this solution,我仍然无法理解脚本。我为此道歉。但是,我想试着理解它。当我能正确理解它时,我想考虑解决方案。很抱歉,我无法尽快解决您的问题。
  • 非常感谢您所做的努力。该脚本来自此链接,stackoverflow.com/questions/45013552/…
  • 感谢您的回复。我不得不再次为我糟糕的英语水平道歉。从您的回复来看,您问题中的底部脚本似乎是针对 Node.js 的。并且,使用了服务帐户。那么,您想将 Node.js 的脚本转换为 PHP 吗?或者,您想使用服务帐户使用 Node.js 下载缩略图?

标签: php laravel google-drive-api


【解决方案1】:

我相信你当前的问题和你的目标如下。

  • 您的 drive URL 是 Google 云端硬盘上文件的网址。
  • 您想从 Google Drive 上的文件(PDF 和 Google 文档)下载缩略图数据。
  • 您希望使用 googleapis for PHP 来实现此目的。
  • 您已经完成了授权过程,您可以将 Drive API 与您的访问令牌一起使用。

从您的 URL https://drive.google.com/file/d/1YVTIGaAvnzH5vF_B1t8-bKsW2Q8ymZBy/view?usp=sharing,在这种情况下,文件 ID 是 1YVTIGaAvnzH5vF_B1t8-bKsW2Q8ymZBy。我认为这可以用来实现你的目标。当这反映到 PHP 的 googleapis 示例脚本时,它变成如下。

示例脚本:

$service = new Google_Service_Drive($client); // Please use your "$client".
$fileId = '1YVTIGaAvnzH5vF_B1t8-bKsW2Q8ymZBy'; // This is the file ID from your sample URL.

$res = $service->files->get($fileId, ["fields" => "name,thumbnailLink"]);
$thumbnailLink = str_replace('=s220', '=s1000', $res->getThumbnailLink());
$name = $res->getName();
file_put_contents($name . '.png', file_get_contents($thumbnailLink));
  • 当您运行此脚本时,将从 Google Drive 中文件的文件 ID 检索缩略图链接,并更改图像大小,然后下载缩略图数据并将其创建为文件。在当前阶段,下载缩略图数据不需要使用访问令牌。

注意:

  • 在此示例脚本中,假设您的$client 可用于检索Google Drive 上文件的文件元数据。请注意这一点。

参考:

【讨论】:

  • 非常感谢您所做的所有努力,但实际上我仍然无法理解。你能给我解释一件事吗。我有一个文件夹“example-app”,其中包含我连接到 google drive api 的 laravel 项目。还有另一个文件夹“webproj”,我想在其中使用您告诉的代码。所以现在在“webproj”中我如何连接到驱动器 api。就像我知道首先我们必须运行命令 composer require google/apiclient:^2.0 但之后我必须在 php 文件中包含什么才能使这段代码工作。现在它说“Google_Service_Drive”不存在
  • 表示如何包含 googleservicedrive.php,这个文件和 Google client.php 将在哪里。很抱歉,我是新手,文档解释得不是很好
  • @SA Ira 感谢您的回复。我带来的不便表示歉意。很遗憾,我无法理解您的回复。在这种情况下,我担心我的回答可能对您的情况没有用处。所以,我想删除我的答案。当我能够正确理解您的问题时,我想考虑解决方案。这是因为我的技术不好。我为我糟糕的技能深表歉意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2017-06-11
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多