通过Google Apps Script上传文件至Amazon S3后文件损坏如何解决
问题原因与解决方案
核心原因
- 你使用的S3 for Google Apps Script库默认会对传入的Blob内容执行UTF-8字符串编码,而PDF属于二进制格式文件,编码过程会修改原始字节流,最终导致文件损坏无法打开。
- 上传时未显式指定正确的Content-Type请求头,S3返回文件时响应头错误也会导致浏览器无法正确识别PDF格式。
解决步骤
- 先验证Google Docs导出的PDF本身正常,执行下方测试代码将导出的Blob存入Google Drive,确认文件可以正常打开:
var blob = DocumentApp.getActiveDocument().getAs('application/pdf'); // 测试导出逻辑是否正常 DriveApp.createFile(blob);
如果导出的文件可正常打开,即可确认问题出在S3上传环节。
- 修改S3上传代码,改为传递Blob字节数组避免自动编码,同时显式指定MIME类型:
var blob = DocumentApp.getActiveDocument().getAs('application/pdf'); var s3 = new S3('XXXXX', 'XXXX'); s3.putObject( "bucket", blob.getName(), blob.getBytes(), // 直接传递二进制字节数组,跳过库的字符串编码逻辑 { logRequests:true, 'Content-Type': 'application/pdf' // 显式指定文件格式 } );
- 若修改后仍存在问题,可对比本地导出的PDF和S3中文件的大小:如果大小不一致,检查库的初始化配置是否有误;如果大小一致,检查S3桶的策略配置,确认文件上传后没有被生命周期规则、跨域配置等篡改内容。
内容的提问来源于stack exchange,提问作者Krishna Kanth Vuppalapati
相关产品推荐
相关产品推荐

