使用cURL上传文件到Google Drive

5

我可以通过将JSON文件放入Drive文件夹来在Google 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);

但是我找不到在Google Drive文档中指定json属性的方法来添加PDF文件。

我应该在哪里添加文件内容呢?这个可能吗?

我是否需要先上传文件到upload/drive,然后再使用文件夹ID上传元数据?我觉得这没有意义。

1个回答

2
您想将文件放在正文中(即在CURLOPT_POSTFIELDS中)。您需要指定与文件类型匹配的Content-Type以及Content-Length。
这个问题在官方文档中有详细说明。
文件元数据应该发送到/drive/v2/files,而不是/upload/drive/v2/files。
这样,您需要进行两个请求。
如果您想同时上传文件和元数据,可以使用API和文件插入: https://developers.google.com/drive/v2/reference/files/insert 请注意,有一个PHP库可以使这个过程更加容易。

是的,编辑了路径。问题在于,如果我发送文件内容,我找不到一种方法来发送父文件夹的ID或文件的任何其他信息。标题属性是否获取文件路径? - mrq
我尝试使用那个库,但出于某些原因无法使其工作。该项目从一开始就是基于curl创建的,所以我不知道这是否与现在在库上无法工作有任何关系。当我在客户端设置访问令牌时,它只在我的控制台上显示“内部服务器错误”。您知道如何以curl方式添加文件吗? - mrq
如上所述,如果您要直接使用API进行操作而不使用方便库,则需要进行两个事务,一个用于放置文件,另一个用于设置元数据。我会尽快更新更详细的答案。 - ernie
我尝试使用双卷曲调用,但如果我在postfields中获取文件,则无法将文件ID发送到上传。我以前从未做过这个,如果我看起来太无知,请原谅我。谢谢。 - mrq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接