使用Amazon S3 Object Lambda添加水印时PDF文件损坏问题
解决S3 Object Lambda返回水印PDF损坏的问题
你的代码生成水印PDF的逻辑没问题(保存回S3能正常打开),问题出在write_get_object_response的响应处理上,给你两个修复方案:
方案1:传递字节内容而非BytesIO对象
boto3的这个API对BytesIO流的处理偶尔会出问题,把流读成字节串再传:
# 修改write_get_object_response调用部分 s3.write_get_object_response( Body=transformed_object.read(), # 读取流的字节内容 RequestRoute=request_route, RequestToken=request_token, ContentType='application/pdf' # 必须指定PDF的内容类型 )
方案2:添加Content-Type响应头
浏览器需要明确知道返回的是PDF文件,不加这个头会导致解析错误,哪怕用BytesIO也得加上:
s3.write_get_object_response( Body=transformed_object, RequestRoute=request_route, RequestToken=request_token, ContentType='application/pdf' )
额外要检查的地方
- 确认水印PDF是有效的单页文件,别用水印本身就损坏的文件
- 把Lambda里的PyPDF4更新到最新稳定版,旧版本可能存在流处理bug
内容的提问来源于stack exchange,提问作者krishna
相关产品推荐
相关产品推荐

