Curl Google Drive API无法处理大型应用程序脚本项目上载

Curl Google Drive API无法处理大型应用程序脚本项目上载,curl,google-apps-script,google-drive-api,google-apps-script-api,Curl,Google Apps Script,Google Drive Api,Google Apps Script Api,我找不到任何关于应用程序脚本项目文件大小限制的文档,但这似乎是我的问题。我有一个大的JS文件,必须添加到应用程序脚本项目中——该项目的JSON结果有5.4 MB。我尝试使用web编辑器添加新的JS文件,但由于它太大,浏览器无法处理它。然后,我想到了使用Google API导出应用程序脚本文件,添加新内容,然后使用另一个API将结果再次导入驱动器,如下所述: 我尝试使用uploadType=media上传,但由于408(请求超时)错误而失败。我假设这是因为文件大于5MB,因为文档建议使用uploa

我找不到任何关于应用程序脚本项目文件大小限制的文档,但这似乎是我的问题。我有一个大的JS文件,必须添加到应用程序脚本项目中——该项目的JSON结果有5.4 MB。我尝试使用web编辑器添加新的JS文件,但由于它太大,浏览器无法处理它。然后,我想到了使用Google API导出应用程序脚本文件,添加新内容,然后使用另一个API将结果再次导入驱动器,如下所述:

我尝试使用
uploadType=media
上传,但由于408(请求超时)错误而失败。我假设这是因为文件大于5MB,因为文档建议使用
uploadType=resubable
。然后我尝试了后一种类型,采用了两种方法:一种是单个请求,由于文件大小的原因,它会再次失败;另一种是多个请求,理论上应该可以工作。但我可能在上传最初的5MB后超时,几分钟后返回408

API似乎可以上传最初的5MB,但之后就丢失了。我读到的所有关于驱动器的内容都让我相信这不是驱动器限制,所以我怀疑这是应用程序脚本限制

以下是步骤:

创建可恢复的上载会话

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

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

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


在修复并停止原始块之后,我可以检查挂起的字节,并成功发送第二个块完成上传

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


在修复并停止原始块之后,我可以检查挂起的字节,并成功发送第二个块完成上传

您应该在issuetracker中创建一个问题。有关更多详细信息,请参阅。想知道5mb js文件中有什么吗?这不是最好的设计,但它是脚本使用的数据列表。我已经在考虑将它放在其他地方。您应该在issuetracker中创建一个问题。有关更多详细信息,请参阅。想知道5mb js文件中有什么吗?这不是最好的设计,但它是脚本使用的数据列表。我已经在考虑把它放在别的地方了。