我正在尝试提供base64编码的图像文件并失败。要么以有趣的方式获得UTF-8编码的响应或行return response
错误。我尝试过的大部分内容都可以在下面的摘录中看作是注释掉的代码。追溯的细节如下。
我的问题是:如何返回base64编码文件?
#import base64
#with open(sPath, "rb") as image_file:
#encoded_string = base64.b64encode(image_file.read())
dContentTypes = {
'bmp' : 'image/bmp',
'cod' : 'image/cis-cod',
'git' : 'image/gif',
'ief' : 'image/ief',
'jpe' : 'image/jpeg',
.....
}
sContentType = dContentTypes[sExt]
response = FileResponse(
sPath,
request=request,
content_type= sContentType#+';base64',
#content_encoding = 'base_64'
#content_encoding = encoded_string
)
return response
取消注释行#content_encoding = encoded_string
会给我一个错误:
AssertionError: Header value b'/9j/4AAQSkZJRgABAQAA' is not a string in ('Content-Encoding', b'/9j/4AAQSkZJRgABAQAA....')
答案 0 :(得分:1)
您看到的错误告诉您Content-Type不是字符串。 Content-Type是HTTP标头。据我所知,HTTP标头必须是字符串。
我相信你想传递的base64编码文件作为响应的主体。 FileResponse在这里不合适,因为你可能想要将编码的字符串作为正文传递,而FileResponse需要一个然后读入并设置正文的路径。
答案 1 :(得分:1)
FileResponse
专门用于上传文件作为响应(因此路径参数)。在您遇到这种情况时,您希望在上传之前对文件进行base64编码。这意味着没有FileResponse
。
由于您已将文件读入内存,因此您只需将内容上传到Response
。
response = Response(encoded_string,
request=request,
content_type=sContentType+';base64')
我实际上并不确定content_encoding
与该类型的;base64
的比较,但我认为编码更常用于gzip压缩内容。 YMMV。