【发布时间】:2020-04-23 15:53:42
【问题描述】:
我找不到任何关于 App Script 项目文件大小限制的文档,但这似乎是我的问题。我有一个必须添加到 App Script 项目的大型 JS 文件 - 项目的结果 JSON 有 5.4 MB。我尝试使用网络编辑器添加新的 JS 文件,但由于它太大,浏览器无法处理它。然后我想使用 Google API 导出 App Script 文件,添加新内容,然后使用另一个 API 再次将结果导入 Drive,如下所述:https://developers.google.com/apps-script/guides/import-export
我尝试使用 uploadType=media 上传,但失败并出现 408(请求超时)错误。我认为这是因为文件大于 5MB,因为文档建议使用uploadType=resumable。然后我按照两种方法尝试了后一种类型:单个请求 - 由于文件大小而再次失败,正如预期的那样,以及作为多个请求,理论上应该可以工作。但我可能会在上传初始 5MB 后尝试超时,几分钟后返回 408。
似乎 API 能够上传最初的 5MB,但之后就丢失了。我读到的关于 Drive 的所有内容都让我相信这不是 Drive 限制,所以我怀疑这是 App Script 限制。
步骤如下:
创建可恢复的上传会话
curl -X PUT \
-H "Authorization: $GOOGLE_BEARER_TOKEN" \
-H "X-Upload-Content-Type: application/vnd.google-apps.script+json" \
-H "X-Upload-Content-Length: 5415490" \
-H "Content-Type: application/json; charset=UTF-8" \
-H "Content-Length: 23" \
-d "{\"title\": \"MyProject\"}" \
-v "https://www.googleapis.com/upload/drive/v2/files/###FILE_ID###?uploadType=resumable"
接收上传 ID 和 URL
HTTP/2 200
x-guploader-uploadid: ###UPLOAD_ID###
location: https://www.googleapis.com/upload/drive/v2/files/###FILE_ID###?uploadType=resumable&upload_id=###UPLOAD_ID###
存储网址
GOOGLE_UPLOAD_LOCATION=https://www.googleapis.com/upload/drive/v2/files/###FILE_ID###?uploadType=resumable&upload_id=###UPLOAD_ID###
发送第一个块
curl -X PUT \
-H "Authorization: $GOOGLE_BEARER_TOKEN" \
-H "Content-Type: application/vnd.google-apps.script+json" \
-H "Content-Length: 5242879" \
-H "Content-Range: bytes 0-5242878/5415490" \
-T file_chunk_1 \
-v "$GOOGLE_UPLOAD_LOCATION"
成功:收到前 4980736 个字节
HTTP/2 308
range: bytes=0-4980735
发送第一个块,连同剩余的字节
curl -X PUT \
-H "Authorization: $GOOGLE_BEARER_TOKEN" \
-H "Content-Type: application/vnd.google-apps.script+json" \
-H "Content-Length: 434754" \
-H "Content-Range: bytes 4980736-5415489/5415490" \
-T file_chunk_2 \
-v "$GOOGLE_UPLOAD_LOCATION"
几分钟后超时
HTTP/2 408
检查上传状态:
curl -X PUT \
-H "Authorization: $GOOGLE_BEARER_TOKEN" \
-H "Content-Length: 0" \
-H "Content-Range: bytes */5415490" \
-v "$GOOGLE_UPLOAD_LOCATION"
我看到只上传了前 5MB:
HTTP/2 308
range: bytes=0-5242879
在超时之后,所有后续尝试都返回相同的范围。
【问题讨论】:
-
你应该在 issuetracker 中创建一个问题。有关详细信息,请参阅tag info page。想知道你在一个 5mb 的 js 文件中有什么吗?
-
不是最好的设计,但它是脚本使用的数据列表。我已经在考虑把它放在别的地方了。
标签: curl google-apps-script google-drive-api google-apps-script-api