【问题标题】:Error: 413 Request Too Large - Python Google Drive API with resumable MediaIoBaseUpload Request错误:413 请求太大 - 带有可恢复 MediaIoBaseUpload 请求的 Python Google Drive API
【发布时间】:2018-10-31 06:45:30
【问题描述】:

这似乎遵循in the documentationon stack overflow 的其他示例中可用的记录模式,但在下面的代码示例中问题未解决。在这里,故事似乎还有更多……

代码如下:

...
drive_service = build('drive',
                      'v3',
                      credentials=credentials,
                      cache_discovery=False)
file_metadata = {
    'name': filename,
    'mimeType': 'application/vnd.google-apps.spreadsheet',
    'parents': ['1c7nxkdgHSnL0eML5ktJcsCRVfEsBD0gc']
}
media = MediaIoBaseUpload(BytesIO(file_contents),
                          mimetype='text/csv',
                          chunksize=16*(256*1024),
                          resumable=True)
request = drive_service.files().create(body=file_metadata,
                                       media_body=media,
                                       fields='id')
response = None
while response is None:
    status, response = request.next_chunk()
    if status:
        print("Uploaded %d%%." % int(status.progress() * 100))
print("Upload complete")
return response.get('id')

这是错误:

Uploaded 28%.
Uploaded 56%.
Uploaded 84%.
<HttpError 413 when requesting https://www.googleapis.com/upload/drive/v3/files?fields=id&alt=json&uploadType=resumable returned "Request Too Large">: HttpError
Traceback (most recent call last):
File "/var/task/file.py", line 73, in upload_to_google_drive
  status, response = request.next_chunk(num_retries=3)
File "/var/task/googleapiclient/_helpers.py", line 130, in positional_wrapper
  return wrapped(*args, **kwargs)
File "/var/task/googleapiclient/http.py", line 981, in next_chunk
  return self._process_response(resp, content)
File "/var/task/googleapiclient/http.py", line 1012, in _process_response
  raise HttpError(resp, content, uri=self.uri)
HttpError: <HttpError 413 when requesting https://www.googleapis.com/upload/drive/v3/files?fields=id&alt=json&uploadType=resumable returned "Request Too Large">

如您所见,在它从最终 HTTP 请求中获得响应之前,看起来一切都很好(每个部分都应有 308 响应),然后它给出了 413 错误代码响应。文档herehere 似乎表明以这种方式上传时没有文件大小限制,所以如果可能,请澄清这篇文章中的示例代码有什么问题。非常感谢!

【问题讨论】:

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


    【解决方案1】:

    在您的脚本中,CSV 数据作为新的电子表格上传。从这种情况来看,我认为 CSV 数据的单元格数量可能是您的问题的原因。电子表格的限制如下。

    电子表格:多达 200 万个用于在 Google 表格中创建或转换为 Google 表格的电子表格单元格。

    当CSV数据的单元格数超过限制时,例如,以下变通方法如何?

    • 拆分 CSV 数据并将其作为电子表格上传。
    • 上传为 CSV 文件并将其用作 CSV 数据。

    参考:

    【讨论】:

    • 非常感谢您的帮助!这就是问题所在。只要我删除 mimeType 元数据 ('mimeType': 'application/vnd.google-apps.spreadsheet'),代码就可以工作。我可以处理这个;我将其上传为 CSV。
    • @Grant Robert Smith 很高兴您的问题得到了解决。也谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2019-08-08
    • 2018-02-13
    • 2016-02-01
    • 1970-01-01
    • 2021-03-15
    • 2016-11-24
    相关资源
    最近更新 更多