Google Drive API无法处理大型App Script项目上传。

问题描述 投票:1回答:1

我找不到任何关于App Script项目文件大小限制的文档,但这似乎是我的问题。我有一个大的JS文件,必须添加到App Script项目中--项目的JSON结果有5.4 MB。我试着使用网络编辑器来添加新的JS文件,但是由于文件太大,浏览器无法处理。然后我想到了使用Google API导出App Script文件,添加新的内容,然后再次使用另一个API将结果导入到Drive中,就像这里描述的那样。https:/developers.google.comapps-scriptguidesimport-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###

存储URL

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

而所有后续的尝试都在超时后返回相同的范围。

curl google-apps-script google-drive-api google-apps-script-api
1个回答
0
投票

显然,问题出在我上传的文件本身。我意识到我是在项目里面上传一个文件(即项目JSON文件里面),针对一个ID,我在我的几个测试中删除了这个ID。这个过程很容易出错,我没有看到。

修正后,停止了一个原始的分块,我可以检查待处理的字节,成功发送第二个分块完成上传。

© www.soinside.com 2019 - 2024. All rights reserved.