gpt4 book ai didi

python - Django StreamingHttpResponse 格式错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:27 27 4
gpt4 key购买 nike

我有简单的 Django View ,用于从 Amazon s3 下载文件。本地保存文件测试没问题:

def some_view(request):

res = s3.get_object(...)

try:
s3_file_content = res['Body'].read()
with open("/Users/yanik/ololo.jpg", 'wb') as f:
f.write(s3_file_content)
# file saved and I can view it
except:
pass

当切换到 StreamingHttpResponse 时,我得到了不正确的文件格式(无法打开)甚至错误的大小(如果原始图像是 317kb 的图像,输出木头大约是 620kb)

def some_view(request):

res = s3.get_object(...)

response = StreamingHttpResponse(res['Body'].read(), content_type=res['ContentType'])
response['Content-Disposition'] = 'attachment;filename=' + 'ololo.jpg'
response['ContentLength'] = res['ContentLength']
return response

尝试了许多不同的设置,但到目前为止对我没有任何效果。输出文件已损坏。

更新

我设法获得了更多的首发信息。如果我将第一个示例中的文件写入方法从 'wb' 更改为 'w' 模式,我将获得与 StreamingHttpResponse 相同的输出(第一个 View 将生成相同的损坏文件)。所以看起来我必须告诉 http header 我的输出是 binary 格式

更新(直达问题核心)

现在我明白了问题所在。 但仍然没有解决方案res['Body'].read() 返回 bytes 类型,StreamingHttpResponse 遍历这些字节,返回字节码。所以我漂亮的传入字节 '...\x05cgr\xb8=:\xd0\xc3\x97U\xf4\xf3\xdc\xf0*\xd4@\xff\xd9' 强制转换为数组: [ ... , 195, 151, 85, 244, 243, 220, 240, 42, 212, 64, 255, 217] 然后像连接字符串一样下载。截图:http://take.ms/JQztk如您所见,最后是列表元素。

StreamingHttpResponse.make_bytes
"""Turn a value into a bytestring encoded in the output charset."""

最佳答案

还是不明白是怎么回事。但是 FileWrapper 来自 https://stackoverflow.com/a/8601118/2576817适用于 boto3 StreamingBody 响应类型。

如果有人有勇气解释这种模糊行为,欢迎。

关于python - Django StreamingHttpResponse 格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35647476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com