使用wget下载预签名S3 URL得到二进制文件而非ASCII文本问题
解决wget下载S3预签名URL得到二进制文件的问题
从你提供的wget输出能看到,S3返回的Content-Type是binary/octet-stream,这导致wget直接按二进制保存,而Chrome会自动识别文件实际类型并处理。以下是几个可行的解决方法:
方法1:指定Accept请求头获取文本内容
强制让S3返回文本类型的响应,给wget加上--header参数:
wget --no-check-certificate --no-proxy --header="Accept: text/plain,text/*" "https://s3.eu-central-1.amazonaws.com/.../text_file.txt"
方法2:处理可能的gzip压缩
如果文件在S3上是gzip压缩存储的,Chrome会自动解压,但wget默认不会。可以让wget自动处理压缩:
wget --no-check-certificate --no-proxy --compression=gzip --header="Accept-Encoding: gzip" "https://s3.eu-central-1.amazonaws.com/.../text_file.txt"
如果已经下载了二进制文件,也可以直接用gunzip解压:
gunzip text_file.txt
方法3:模拟Chrome的User-Agent
S3有时会根据请求的User-Agent返回不同的内容格式,模拟Chrome的请求头试试:
wget --no-check-certificate --no-proxy --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" "https://s3.eu-central-1.amazonaws.com/.../text_file.txt"
补充说明
核心问题是wget和Chrome发送的请求头差异,导致S3返回的响应处理方式不同。Chrome会发送更偏向文本的Accept头,并且自动处理压缩,而wget默认的请求头更通用,所以返回二进制流。通过调整wget的请求参数对齐Chrome的行为,就能得到正常的ASCII文本文件。
内容的提问来源于stack exchange,提问作者user2416984
相关产品推荐
相关产品推荐

