使用 laravel 从 google 文档获取文件名
get filename from google docs using laravel
我的网站有一项功能,用户可以将 link 上传到他们的 google 文档文件。我想做的是在一个地方列出所有上传的 link。这样做时,我需要显示与 link.
关联的文件的名称
我可以从 link 中提取文件 ID,并确保 link 属于 google 文档。现在我需要找到一种从中获取文件名的方法。我尝试通过 google 开发人员 API 获取 google 驱动器,但它仅适用于 uploading/doing 授权文档中的任何内容。我的问题是,我的用户手动将文件上传到我无法控制的文档中。我得到的只是一个可共享的 link 并以某种方式从中获取名称。此外,缩略图也有帮助。
我试过这样做,但它抛出错误
$url = "https://www.googleapis.com/drive/v3/files/1G6N6FyXzg7plgEtJn-Cawo5gbghrS8z9_j_cvVqcEDA";
// and
$url = "https://docs.google.com/document/d/1G6N6FyXzg7plgEtJn-Cawo5gbghrS8z9_j_cvVqcEDA/edit?usp=sharing"
$html= file_get_contents($url);
print_r($html);
任何愿意帮助的人的假人link:https://docs.google.com/document/d/1G6N6FyXzg7plgEtJn-Cawo5gbghrS8z9_j_cvVqcEDA/edit?usp=sharing
由于我们正在将 URL 写入文件,我们可以做一些事情 -
- 获取文件的 ID
- 获取那个文件的类型
在我解释如何做之前,最好知道可能有两种情况。一个文件是 google 文档文件,另一个是 google 驱动器文件。它们都以不同的 URL 开头。
$url = explode('/', Str::after(
Str::after($request->url, 'https://docs.google.com/'), 'https://drive.google.com/'
));
我正在使用 2 Str::after()
从 URL 中删除不需要的部分。然后我使用 explode 将 URL 转换为数组。
由于我们从URL中排除了无用的部分,所以我们剩下document/d/1G6N6FyXzg7plgEtJn-Cawo5gbghrS8z9_j_cvVqcEDA/edit?usp=sharing
数组形式。
因此,如果我们尝试执行 $url[2]
,我们将获得文件的 ID。此外,“文件”也是一个值得关注的好东西。我用它们来显示正确的图像。它们可以有 5 种不同类型(4 种用于 google 文档,1 种用于 google 驱动器)。这些是 - google 文档的文档、电子表格、表格、演示文稿和 google 驱动器的文件。我会建议大家将这些存储在数据库中,这样在显示时就不需要额外的计算了。
现在,回答问题的实际部分。如何获得名字。我已经创建了一个新的模型方法来处理这个问题。
public function name()
{
$key = config('app.google_api_key');
$url = "https://www.googleapis.com/drive/v3/files/{$this->file_id}?key={$key}";
$response = Http::get($url)->json();
return $response['name'] ?? 'Private File';
}
不要忘记在配置文件 app.php
中添加 Google API 密钥(您需要创建一个)。您可以从 Google 开发者控制台获取 API 密钥并创建一个 project-specific 密钥。请注意,此密钥不必属于 URL.
的用户
此外,这里需要注意的是 $response
returns 错误代码,如果文件未设置为对 public 可见或文件被删除。
我的网站有一项功能,用户可以将 link 上传到他们的 google 文档文件。我想做的是在一个地方列出所有上传的 link。这样做时,我需要显示与 link.
关联的文件的名称我可以从 link 中提取文件 ID,并确保 link 属于 google 文档。现在我需要找到一种从中获取文件名的方法。我尝试通过 google 开发人员 API 获取 google 驱动器,但它仅适用于 uploading/doing 授权文档中的任何内容。我的问题是,我的用户手动将文件上传到我无法控制的文档中。我得到的只是一个可共享的 link 并以某种方式从中获取名称。此外,缩略图也有帮助。
我试过这样做,但它抛出错误
$url = "https://www.googleapis.com/drive/v3/files/1G6N6FyXzg7plgEtJn-Cawo5gbghrS8z9_j_cvVqcEDA";
// and
$url = "https://docs.google.com/document/d/1G6N6FyXzg7plgEtJn-Cawo5gbghrS8z9_j_cvVqcEDA/edit?usp=sharing"
$html= file_get_contents($url);
print_r($html);
任何愿意帮助的人的假人link:https://docs.google.com/document/d/1G6N6FyXzg7plgEtJn-Cawo5gbghrS8z9_j_cvVqcEDA/edit?usp=sharing
由于我们正在将 URL 写入文件,我们可以做一些事情 -
- 获取文件的 ID
- 获取那个文件的类型
在我解释如何做之前,最好知道可能有两种情况。一个文件是 google 文档文件,另一个是 google 驱动器文件。它们都以不同的 URL 开头。
$url = explode('/', Str::after(
Str::after($request->url, 'https://docs.google.com/'), 'https://drive.google.com/'
));
我正在使用 2 Str::after()
从 URL 中删除不需要的部分。然后我使用 explode 将 URL 转换为数组。
由于我们从URL中排除了无用的部分,所以我们剩下document/d/1G6N6FyXzg7plgEtJn-Cawo5gbghrS8z9_j_cvVqcEDA/edit?usp=sharing
数组形式。
因此,如果我们尝试执行 $url[2]
,我们将获得文件的 ID。此外,“文件”也是一个值得关注的好东西。我用它们来显示正确的图像。它们可以有 5 种不同类型(4 种用于 google 文档,1 种用于 google 驱动器)。这些是 - google 文档的文档、电子表格、表格、演示文稿和 google 驱动器的文件。我会建议大家将这些存储在数据库中,这样在显示时就不需要额外的计算了。
现在,回答问题的实际部分。如何获得名字。我已经创建了一个新的模型方法来处理这个问题。
public function name()
{
$key = config('app.google_api_key');
$url = "https://www.googleapis.com/drive/v3/files/{$this->file_id}?key={$key}";
$response = Http::get($url)->json();
return $response['name'] ?? 'Private File';
}
不要忘记在配置文件 app.php
中添加 Google API 密钥(您需要创建一个)。您可以从 Google 开发者控制台获取 API 密钥并创建一个 project-specific 密钥。请注意,此密钥不必属于 URL.
此外,这里需要注意的是 $response
returns 错误代码,如果文件未设置为对 public 可见或文件被删除。