【问题标题】:cURL upload to Google DrivecURL 上传到 Google Drive
【发布时间】:2012-11-09 03:33:42
【问题描述】:

我可以通过 json 在 Google Drive 中创建一个文件到 Drive 文件夹中:

$data = array(
    "title" => $_FILES['file']['name'],
    "parents" => array(array(
        "kind" => "drive#parentReference",
        "id" => $parent_id
    )),
    "mimeType" => "application/pdf"
);
$data = json_encode($data);

$url = "https://www.googleapis.com/drive/v2/files?oauth_token=".$accessToken;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

但我找不到在其上添加 PDF 文件的方法,因为 Google Drive 文档中没有指定 json 属性。

我必须在哪里添加文件内容? 这可能吗?

我是否必须先上传文件以上传/驱动,然后再上传带有文件夹 ID 的元数据?我不觉得这有什么意义。

【问题讨论】:

    标签: php curl upload google-drive-api


    【解决方案1】:

    您想将文件放在正文中(即在 CURLOPT_POSTFIELDS 中)。您还需要指定与文件类型匹配的 Content-Type 和 Content-Length。

    这是well documented

    文件元数据应该转到 /drive/v2/files,而不是 /upload/drive/v2/files。

    这样,你必须提出两个请求。

    如果你想同时做一个文件和元数据,你可以使用 API 和文件插入:

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

    请注意,有一个 PHP library 可以让这更容易。

    【讨论】:

    • 是的,编辑了路径。问题是,如果我发送文件内容,我找不到发送父文件夹 id 或文件上任何其他信息的方法。是获取文件路径的 Title 属性吗?
    • 我尝试使用该库,但由于某种原因无法正常工作。该项目从一开始就是在 curl 上制作的,所以我不知道这是否与它现在无法在库上工作有关。当我在客户端设置访问令牌时,它只是在我的控制台上显示内部服务器错误。你知道如何以 curl 方式添加文件吗?
    • @mrq 如上所述,如果你打算直接使用 API 来做,而不使用便利库,你需要做两个事务,一个是放置文件,另一个是设置元。有机会我会尝试更新更详细的答案。
    • 我尝试过使用双卷曲调用,但如果我在 postfields 上获取文件,我无法发送文件 ID 将其上传到。我以前从来没有这样做过,如果我看起来太无知,我很抱歉,但我就是这样做的。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多