PHP从webContentLink下载到服务器

时间:2013-09-27 08:31:02

标签: php

我的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);

我需要更改才能让它正常工作?

2 个答案:

答案 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的人都可以访问,所以我认为它可能有风险......因为我的需求很完美。

希望它有所帮助 享受