使用Python中的请求将文件上传到Google云端硬盘

时间:2018-02-09 23:07:47

标签: python google-api google-drive-api python-requests

我很难通过他们的API正确上传文件到Google云端硬盘。我使用的是Python,而且我知道有一个适用于Google API的客户端库。这是我现在拥有的。运行以下代码时,会在Google云端硬盘中创建一个空的无标题文档,但该文档不在正确的目录root/level_1中。我不确定我对datafiles对象做错了什么。代码中有什么突出的东西吗?

以下是我关注的docs

import json
import requests

url = "https://www.googleapis.com/upload/drive/v2/files?access_token=ACCESS_TOKEN&uploadType=multipart"
files = {"file": requests.get("image_url").content}
data = {
    "title": "image_url.jpg",
    "parents": ["root", "level_1"]
}

response = requests.post(url, data=json.dumps(data), files=files)
# json.loads(response.text)["title"] = "Untitled"
return response

2 个答案:

答案 0 :(得分:1)

这次修改怎么样?

修改要点:

  • 使用Drive API时,访问令牌必须包含在标头中。
  • 如果要将文件插入所需的父母,请使用文件夹ID。
    • 文件夹ID为#####的{​​{1}}。
    • 如果要将文件插入根文件夹,可以使用https://drive.google.com/drive/folders/#####作为ID。

修改后的脚本:

root

注意:

  • 此修改后的脚本通过调整您的脚本使用了Drive API v2。
  • 请注意以下几点。
    • 在此修改过的脚本中,从import json import requests headers = {"Authorization": "Bearer " + ACCESS_TOKEN} para = { "title": "image_url.jpg", "parents": [{"id": "root"}, {"id": "### folder ID ###"}] } files = { "data": ("metadata", json.dumps(para), "application/json; charset=UTF-8"), "file": requests.get("image_url").content } response = requests.post("https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart", headers=headers, files=files) return response 检索到的图像文件上传到根文件夹,文件夹中包含image_url的Google云端硬盘,文件名为“image_url.jpg”。
    • 在这种情况下,“image_url.jpg”有2个父母。因此,当其中一个被删除时,双方父母中的文件将被删除。
  • 使用此脚本时,请再次确认以下2点。
    • 是否启用了Drive API。
    • 访问令牌是否包含将文件上传到Google云端硬盘的范围。

如果我误解了你的问题,我很抱歉。

答案 1 :(得分:0)

我认为您无法在上传时设置目录,因此' root'永远是默认的。首先将其上传到根文件夹,然后移动文件。有关使用Python的完整代码实现,请关注Wesley Chun的博客: Uploading & Downloading files with Python

片段:

DRIVE = build('drive', 'v2', http=creds.authorize(Http()))

FILES = (
    ('hello.txt', False),
    ('hello.txt', True),
)
for filename, convert in FILES:
    metadata = {'title': filename}
    res = DRIVE.files().insert(convert=convert, body=metadata,
            media_body=filename, fields='mimeType,exportLinks').execute()
    if res:
        print('Uploaded "%s" (%s)' % (filename, res['mimeType']))

另外,请查看官方Drive API Uploading Files文档。

要选择要上传的文件夹,请检查此SO post