25

我正在使用 Google Drive 开发一个应用程序。我希望用户能够通过链接共享文件,并将权限设置anyonewithLinkGoogle Developers 文档中所述。

但是,我无法弄清楚要分享什么链接。当我在 Google Drive 浏览器界面中共享文件时,我看到Link to share的格式如下:

https://docs.google.com/presentation/d/[...]/edit?usp=sharing

这种格式的链接不是文件资源对象的一部分,也不是从设置权限的 http 调用返回的。我希望有人可以向我解释如何通过 REST api 获取此链接?

4

4 回答 4

25

您可以使用alternateLinkFile 资源中的属性来获取可以共享的链接,以便在相关的 Google 编辑器或查看器中打开文件:

https://developers.google.com/drive/v2/reference/files

更新

[使用 API V3]( https://developers.google.com/drive/api/v3/reference/files建议使用该webViewLink属性。

于 2013-03-05T05:53:31.697 回答
15

要使用Google Drive API实际启用链接共享

drive.permissions.create({
  fileId: '......',
  requestBody: {
    role: 'reader',
    type: 'anyone',
  }
});

使用以下方法获取webLinkView值:

const webViewLink = await drive.files.get({
    fileId: file.id,
    fields: 'webViewLink'
}).then(response => 
    response.data.webViewLink
);

于 2019-02-26T20:31:40.767 回答
3

在我使用 PHP Api v3 的情况下,要使链接不为空,您必须定义您请求此字段......并且如果您拥有正确的权限:

所以是这样的:

$file =self::$service->files->get("1ogXyGxcJdMXt7nJddTpVqwd6_G8Hd5sUfq4b4cxvotest",array("fields"=>"webViewLink"));
于 2017-02-23T13:50:18.047 回答
1

这是一个关于如何获取WebViewLink文件属性(AKA文件编辑链接)的实际示例:

$file = $service->files->get($file_id, array('fields' => 'webViewLink'));
$web_link_view = $file->getWebViewLink();

或者

$sheetsList = $drive_service->files->listFiles([
  'fields' => 'files(id, name, webViewLink, webContentLink)',
]);

$web_link_view = $sheetsList->current()->getWebViewLink();

Pay attention that you should load the file specifying which fields you wanna bring with it (In this case, webViewLink). If you don't do that, only id and name will be available.

In case you need to adjust the file sharing settings, this is how you do it:

$permissions = new \Google_Service_Drive_Permission();
$permissions->setRole('writer');
$permissions->setType('anyone');

$drive_service->permissions->create($file_id, $permissions);

Possible values for setRole() and setType() can be found here: https://developers.google.com/drive/api/v3/reference/permissions/create

于 2020-08-07T15:02:45.990 回答