使用Boto3上传React构建文件夹至S3时路径问题求助
问题分析与解决
你当前的代码能完成文件上传,但S3上的文件路径不符合预期,核心问题是Windows系统的路径分隔符(反斜杠\)和S3使用的正斜杠/不兼容。
当你通过path.relative_to(src_dir)获取相对路径时,Windows环境下得到的路径格式是static\css\main.e412e58a.css这种带反斜杠的格式,而S3会将反斜杠视为对象名的一部分,不会解析成路径分隔符,最终导致S3上的文件路径不是你期望的static/css/main.e412e58a.css。
修复代码
只需要在将相对路径转为字符串后,把反斜杠替换成正斜杠即可,修改主函数里的路径处理逻辑:
filename = str(filename).replace("\\", "/")
完整的主函数修改后如下:
if __name__ == "__main__": for path in Path(src_dir).rglob('*'): if path.is_file(): filename = path.relative_to(src_dir) filename = str(filename).replace("\\", "/") # 新增路径分隔符替换逻辑 path = str(path) if filename.endswith('html'): ExtraArgs = {'ContentType': 'text/html'} elif filename.endswith('css'): ExtraArgs = {'ContentType': 'text/css'} elif filename.endswith('json'): ExtraArgs = {'ContentType': 'application/json'} elif filename.endswith('png'): ExtraArgs = {'ContentType': 'image/png'} elif filename.endswith('jpeg') or filename.endswith('jpg'): ExtraArgs = {'ContentType': 'image/jpeg'} upload_file(path, bucket, filename, ExtraArgs=ExtraArgs)
跨平台优化建议
可以用Path对象的as_posix()方法更优雅地处理路径分隔符,无需手动替换,该方法会自动生成正斜杠分隔的路径,兼容所有操作系统:
filename = path.relative_to(src_dir).as_posix()
内容的提问来源于stack exchange,提问作者radhey_mishra
相关产品推荐
相关产品推荐

