修改GitHub Python脚本以支持更多MIME类型的技术求助
扩展S3到Google Drive脚本支持多文件类型解决方案
针对你修改脚本MIME类型后报错的问题,核心原因是原脚本仅为电子表格设计,存在专属逻辑限制,以下是具体修复步骤:
1. 移除电子表格专属处理逻辑
原脚本大概率包含仅适用于电子表格的代码,需要排查并调整:
- 查找是否有调用Google Sheets API的代码(比如
spreadsheets.create、spreadsheets.values相关接口),这类接口只支持电子表格,普通文件需替换为Google Drive的files.create接口。 - 删除或注释掉文件内容解析、格式转换的代码(比如将S3文件转为电子表格格式的逻辑),jpg、mp3这类二进制文件无需处理,直接上传原始字节流即可。
2. 修正MIME类型配置
不要仅修改最后一行的固定MIME值,改为动态适配多类型:
- 优先从S3文件的
Content-Type头部获取原生MIME类型,比如S3上的jpg文件会自带image/jpeg类型,直接复用即可。 - 如果需要将部分格式转换为Google Drive专属类型(比如Excel转Google表格),可以做映射处理,示例代码如下:
# 替换原固定MIME类型的代码 mime_mapping = { # 保留电子表格的转换映射 'application/vnd.ms-excel': 'application/vnd.google-apps.spreadsheet', # 新增其他文件类型的原生MIME 'image/jpeg': 'image/jpeg', 'image/jpg': 'image/jpeg', 'audio/mpeg': 'audio/mpeg' } # 从S3对象获取原始Content-Type,找不到则用默认值 raw_mime = s3_object.get('ContentType', 'application/octet-stream') mime_type = mime_mapping.get(raw_mime, raw_mime)
3. 调整上传逻辑适配二进制文件
原脚本可能针对电子表格做了文本编码处理,需修改为二进制上传:
- 确保从S3读取文件时用二进制模式(比如
rb),不要做UTF-8编码转换。 - 调用Drive API时,使用
media_body参数传入二进制流,并且关闭不必要的convert参数(普通文件设置convert=False,避免强制转换导致报错)。
4. 排查报错细节
如果仍报错,先提取具体错误信息:
- 比如API返回
400 Bad Request可能是MIME类型不匹配或参数错误;403是权限不足,需确认Google Drive API权限包含drive.file或更广泛的上传权限。
内容的提问来源于stack exchange,提问作者kDos
相关产品推荐
相关产品推荐

