我是Google Drive API的新用户,并且我一直以某种非正统的方式使用它。现在我只有一个API密钥进行身份验证,我使用https://www.googleapis.com/drive/v3/files/file-id?alt=media&key=api-key
方案下载文件。这可以成功下载文件,除了它们的名称实际上只是没有任何扩展名的文件ID。到目前为止,我已经尝试了一些方法,包括在我的PHP代码中设置标题,用于定义content-type
,content-disposition
甚至content-length
属性,但这些标题使用了我的服务器' s带宽,即使使用得当。我还尝试了download
标记的HTML a
属性,但我发现它只适用于blob或本地文件。我也试过一些Javascript无济于事。以下是我的代码的一部分,它使用blob下载并重命名文件,但是我不想走这条路并寻求更好的选择:
<?php
$id = "SOME-ID-HERE";
$key = "API-KEY-HERE"; // Google Drive API Key
$pre = "https://www.googleapis.com/drive/v3/files/";
$dlink = $pre.$id."?alt=media&key=".$key;
?>
<script type="text/javascript">
window.URL = window.URL || window.webkitURL;
var xhr = new XMLHttpRequest(),
a = document.createElement('a'), file;
xhr.open('GET', '<?php echo $dlink ?>', true);
xhr.responseType = 'blob';
xhr.onload = function () {
file = new Blob([xhr.response], { type : 'application/octet-stream' });
a.href = window.URL.createObjectURL(file);
a.download = 'filename.ext';
a.click();
};
xhr.send();
</script>
正如您所看到的,我甚至没有使用Drive API PHP库,我只是使用他们的链接来返回文件内容或文件的元数据。我怀疑这就是为什么正在下载的文件被重命名为文件ID,但我不确定。由于我不想使用blob,除非必须这样做,我的主要问题是:我可以使用Drive API(正确地包含PHP库)从Google Drive下载文件,但是要准确命名它们如何在Google云端硬盘中命名?其次,如果可以,它是否使用我的服务器带宽来提供文件,还是直接来自Google的服务器?我想尽可能避免使用我的服务器带宽来实现这一目标。
更新:我这里有一台适用于此的服务器,但它是一种让它运行起来的hacky方法。我仍然觉得使用API更安全,因为它是未来的证据。 https://drivedl.cf/file-id
我不推荐使用它,但它有效,但是我需要清除一些潜在的错误
更新2: https://drivedl.cf/file-id
目前无法使用,因为我现在正在使用它,尝试使用API,但它给了我一些问题