使用NodeJS从Google Drive下载文件上传至S3时文件损坏问题
问题原因及解决方案
问题出在你用FormData包裹文件上传到S3预签名PUT URL——S3预签名PUT请求是用来直接上传原始文件内容的,不需要用FormData封装。用FormData后,上传的内容会包含表单的边界标识、字段描述等额外信息,这些内容会破坏PDF的原始结构,导致文件损坏。
修正后的代码
1. 保留Google Drive文件下载逻辑(无需修改)
const file = await this.driveClient.files.get( { fileId: id, alt: 'media', }, { responseType: 'stream' }, );
2. 直接上传流到S3(去掉FormData)
const uploadedDocument = await axios({ method: 'put', url: presignedS3Url, data: file.data, // 直接传入Google Drive返回的流 headers: { 'Content-Type': 'application/pdf' // 指定PDF的MIME类型,确保S3识别正确 }, });
补充说明
如果之前尝试过blob响应类型,同样不需要用FormData,直接把blob对象作为data传入axios请求即可,同时设置对应的Content-Type。
内容的提问来源于stack exchange,提问作者Dezzley
相关产品推荐
相关产品推荐

