Google drive api 谷歌文档缩略图链接返回404

Google drive api 谷歌文档缩略图链接返回404,google-drive-api,google-docs,Google Drive Api,Google Docs,我对Google文档的Google Drive v3 API文件资源thumbnailLink属性的行为有疑问。根据文件是Google文档还是其他类型的文件,创建了两种不同类型的缩略图链接。当我进入谷歌文档的thumbnailLinkURL时,我总是得到一个404响应,除非我在Chrome浏览器上打开它,在那里我使用相同的谷歌帐户登录 关于缩略图链接,我的问题如下: 访问它所需的最小OAuth作用域是什么 我在浏览器中查看缩略图而不是获取404所需的确切标准是什么 有没有可能公开谷歌文档缩略图

我对Google文档的Google Drive v3 API文件资源
thumbnailLink
属性的行为有疑问。根据文件是Google文档还是其他类型的文件,创建了两种不同类型的缩略图链接。当我进入谷歌文档的
thumbnailLink
URL时,我总是得到一个404响应,除非我在Chrome浏览器上打开它,在那里我使用相同的谷歌帐户登录

关于缩略图链接,我的问题如下:

  • 访问它所需的最小OAuth作用域是什么
  • 我在浏览器中查看缩略图而不是获取404所需的确切标准是什么
  • 有没有可能公开谷歌文档缩略图的链接?
    • 如果没有,是否有其他方法来构建缩略图url
我最好避免这样做,因为它要么暴露访问密钥,要么通过设置代理增加复杂性

这是google文档缩略图链接的格式:
https://docs.google.com/feeds/vt?gd=true&id=1TjchRkZ0MxurnBkKNitDtoMQiyJUV6rv0z9HQ7kHEg0&v=3&s=AMedNnoAAAAAXaTCgqfi_sjlT4SAGAEd_ZABNBoSvMnM&sz=s220

使用以下类型缩略图链接的其他类型的文档是公开的:
https://lh3.googleusercontent.com/JkrFnbTt-H1rJb-kXhjRsQI3NiiVu7DYD_L7kBLPvBzu4-ieXNB6Jb-ukQpHwujlzybaeirEyV0=s220

我在Drivev3“trythisapi”屏幕上看到了这种行为,所有作用域都已授权。我在收到响应后立即转到thumbnailLink,这样它就不会过期


编辑:
webViewLink
在谷歌幻灯片中对我有效。因此,我可以使用该链接公开查看全部内容,但仍然可以使用
缩略图链接获得404。基于这种不一致性,这似乎是一个bug,而不是安全或权限问题

这不是一个bug。如图所示,如果您无权访问文件内容,则不应访问
缩略图链接


作为一种解决方法,我建议您的应用程序或任何有权访问缩略图链接的人将缩略图上传到驱动器,以便用户可以访问这些驱动器链接。无论如何,我不知道你的项目的细节,所以我不确定这是否是一个可行或理想的解决办法。

你得到404的原因是二进制文档的缩略图是可以公开访问的。如果您可以进入Google文件的
ThumbnailLink
字段,您可以使用简单的
WebClient
下载缩略图图像,而无需任何身份验证

但是,如果您试图使用
WebClient
下载Google文档的缩略图,则会出现404错误,因为Google希望您使用经过身份验证的连接下载此
ThumbnailLink
URI

我曾经遇到过类似的问题,能够很容易地解决它。我使用Google Drive API(版本3)访问Google Drive上的文档。Google API已经对我的帐户进行了身份验证,这就是我首先获得
缩略图链接的方式。但是不要使用
WebClient
,而是使用DriveService的
HTTPClient
下载缩略图。DriveService中的
HTTPClient
创建一个经过身份验证的HTTP请求,允许您下载Google文档的缩略图

  private async Task<bool> DownloadThumbnail(string thumbnailURL, string localFile)
        {
            try
            {    
                var client = DriveService.HttpClient;
                var response = await client.GetAsync(thumbnailURL);
                using (var fs = new FileStream(localFile, FileMode.CreateNew))
                    await response.Content.CopyToAsync(fs);
                
                return true;    
            }
            catch (Exception ex)
            {
                // log error
                return false;
            }
        }
私有异步任务下载缩略图(字符串thumbnailURL,字符串localFile)
{
尝试
{    
var client=DriveService.HttpClient;
var response=await client.GetAsync(thumbnailURL);
使用(var fs=new FileStream(localFile,FileMode.CreateNew))
等待响应。Content.CopyToAsync(fs);
返回true;
}
捕获(例外情况除外)
{
//日志错误
返回false;
}
}

是的,我阅读了物业说明。这是一个非常不具体的描述。这就是为什么我会问更具体的问题。另外,如果我可以在网络浏览器中打开整个幻灯片或文档,我会说我确实可以访问文件的内容。哦,等等,当你没有登录谷歌帐户时,你可以访问非公开的文档吗?是的,我可以。只有当你在浏览器上登录到google帐户时,才应该加载对内容的访问吗?这是一个有趣的行为,是API文档中的吗?我认为对
webViewLink
的访问基于用于授权用户的OAuth 2.0范围。因此,如果您使用包含范围
https://www.googleapis.com/auth/drive
那么你应该有权查看任何文件。我看到了同样的行为,你找到解决办法了吗?