Python:从 S3 下载的 XML 文件充满字符串转义字符

问题描述 投票:0回答:1

我有许多 XML 文件已添加到 S3(本地堆栈服务器)。我可以通过 Cyberduck 查看这些文件,它们是有效的 xml 文件。但是,当我下载对象时,XML 数据用双引号括起来,文档中的每个双引号都被排除,并且每行都有 。我已确保响应内容类型为“text/xml”。

s3 = boto3.client('s3',
                  config=s3_config,
                  endpoint_url=endpoint_url,
                  aws_access_key_id='foo',
                  aws_secret_access_key='bar',
                 )

try:
    r = s3.get_object(Bucket=bucket, Key=key)
    return Response(r['Body'].read().decode("utf-8"))
except Exception as e:
    raise(e)

这会导致

的反应
"
<rpc-reply xmlns:....">\n
    <data>\n
        <configuration>\n    
            <server>meanwhileinhell</server>\n
            <security>\n  
                <group>\n  
                    <name>mih-</name>\n
                    <system>\n            
                        <scripts>\n

             ...
             ...
             ...

        </configuration>\n
    </data>\n
</rpc-reply>\n"

我似乎无法确保这是一个原始的 XML 响应正文,所有转义都已被删除。以下是我尝试过的一些其他实现:

from io import BytesIO

f = BytesIO()
s3.download_fileobj(bucket, key, f)
return Response(f.getvalue(), content_type="text/xml")
from xml.etree import ElementTree

tree = ElementTree.fromstring(r['Body'].read())
return Response(tree)

我也尝试过使用

pickle
BeautifulSoup
但没有进一步成功。我还没有尝试过使用其他类型的文件(例如 jpg),但为什么我无法从对象中获取实际的原始二进制数据?我正在下载的文件是 <50KB.

python amazon-s3 boto localstack botocore
1个回答
0
投票

我通过使用 StreamingHttpResponse 并解码流来实现此目的。没有转义字符或用双引号引起来。

from django.http import StreamingHttpResponse

r = s3.get_object(Bucket=bucket, Key=key)
return StreamingHttpResponse(r['Body'].read().decode('utf-8'), content_type="text/xml")
© www.soinside.com 2019 - 2024. All rights reserved.