金字塔FileResponse编码

时间:2013-09-16 11:22:01

标签: pyramid content-encoding

我正在尝试提供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....')

2 个答案:

答案 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。