Drive API转换15MB JPG为GDOCS遇Request Too Large错误求助
解决Drive API处理大文件OCR转GDOCS时的「Request Too Large」错误
你遇到的问题是因为Drive API v2的Files.insert普通上传接口对单次请求的文件大小有限制,15MB的文件超出了这个限制,所以触发了「Request Too Large」错误。要处理大文件,需要改用**可恢复上传(Resumable Upload)**方式,这种方式将文件元数据和内容分开传输,支持更大的文件尺寸。
以下是修改后的完整脚本,替换了原来的Drive.Files.insert调用,改用可恢复上传流程:
// 处理JPG转GDOCS并完成OCR,同时将原文件移至归档文件夹 function convertJpegToGdoc() { // 批量处理源文件夹中的JPG文件 var files = DriveApp.getFolderById(srcFolderId).getFilesByType(MimeType.JPEG); while (files.hasNext()) { var file = files.next(); // 1. 构建文件元数据(指定目标文件名、文件夹、转成GDOCS格式) var fileMetadata = { title: file.getName(), parents: [{id: dstFolderId}], mimeType: MimeType.GOOGLE_DOCS }; // 2. 初始化可恢复上传会话,获取上传URL var initOptions = { method: 'POST', headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(), 'Content-Type': 'application/json' }, payload: JSON.stringify(fileMetadata), muteHttpExceptions: true }; var initResponse = UrlFetchApp.fetch('https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable&ocr=true', initOptions); var uploadUrl = initResponse.getHeaders()['Location']; // 3. 通过上传URL传输文件内容 var uploadOptions = { method: 'PUT', headers: { 'Content-Type': file.getMimeType() }, payload: file.getBlob().getBytes(), muteHttpExceptions: true }; UrlFetchApp.fetch(uploadUrl, uploadOptions); } // 将处理完的原文件移至归档文件夹 var inputFolder = DriveApp.getFolderById(srcFolderId); var processedFolder = DriveApp.getFolderById(trshFolderId); var files = inputFolder.getFiles(); while (files.hasNext()) { var file = files.next(); file.moveTo(processedFolder); } }
关键说明
- 可恢复上传流程:先发送元数据获取上传会话URL,再通过该URL上传文件内容,避免单次请求过大的问题。
- 权限配置:确保脚本拥有足够的权限,需要在脚本编辑器中开启「显示appsscript.json清单文件」,并在清单中添加以下OAuth范围:
"oauthScopes": [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/script.external_request" ] - 保留OCR功能:在初始化请求的URL中保留了
&ocr=true参数,确保转换时完成OCR识别。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

