我的Google云端硬盘中有mp3文件,我想将其下载到我的服务器。
Google Drive API为我提供了以下网址:
https://docs.google.com/uc?id=0B-8ZjfWGsMOwZVdmQnBXX1pnTEE&export=download
此代码不起作用:
$data = file_get_contents("https://docs.google.com/uc?id=0B-8ZjfWGsMOwZVdmQnBXX1pnTEE&export=download");
file_put_contents("./test.mp3", $data);
我需要更改才能让它正常工作?
答案 0 :(得分:0)
问题是没有登录(错误403)谷歌的用户无法访问这些文件。
使用file_get_contents
会非常简单,但不幸的是,您必须向Google进行身份验证或更改您的mp3权限。
在快速谷歌搜索中,我发现此博客解释了一个类:http://hublog.hubmed.org/archives/001954.html
你可以搜索“google api auth php oauth class drive fetch files”的关键字。
答案 1 :(得分:0)
您好我遇到了同样的问题,最后一个答案不是吗,因为getWebContentLink应该是针对未经授权用户的可下载链接,正如谷歌开发者网站上所说的那样
"如果您希望允许未经授权的用户直接在Web浏览器中而不是通过API下载文件,请使用webContentLink。您可以将用户重定向到此网址,也可以将其作为可点击的链接提供。"
我的代码(以及上面的google声明)的问题在于,我从webapp上传的文件默认情况下无法共享。实际上所有文件都不是。
所以当我向我的代码添加这样的适当权限时:
//the function
function insertGooglePermission($service, $fileId, $value, $type, $role) {
set_include_path(get_include_path() . PATH_SEPARATOR . APP_ROOT . '/conf/google-drive/src');
include_once APP_ROOT . '/conf/google-drive/vendor/autoload.php';
$newPermission = new Google_Service_Drive_Permission();
$newPermission->setValue($value);
$newPermission->setType($type);
$newPermission->setRole($role);
try {
return $service->permissions->insert($fileId, $newPermission);
} catch (Exception $e) {
print "ERROR: " . $e->getMessage();
}
return NULL;
}
//and the usage
insertGooglePermission($service, $createdFile->getId(), "default", "anyone", "reader");
403错误消失了。我必须告诉你,给予这个权限可以让任何碰巧知道文件ID的人都可以访问,所以我认为它可能有风险......因为我的需求很完美。
希望它有所帮助 享受