0

突然機能しなくなったビューがあります。明らかに何かが変わったに違いありませんが、何が変わったのかわかりません。

ビューが呼び出されると、ビューは pdf ファイルを返すことになっています (つまり、content-disposition は添付ファイルです)。ブラウザは pdf をダウンロードしようとしますが、常に 0 バイトです。

問題が何であるかをデバッグするために、あちこちにログを記録しました。応答オブジェクトが generate_pdf から返されたときに、正しい内容が含まれていることがわかります。どういうわけかそことクライアント ブラウザの間で、単に消えてしまいます。

誰にもアイデアはありますか?

ジャンゴ 1.3、nginx、uwsgi

ビュー.py

def get(self, request, *args, **kwargs):
    ...
    return generate_pdf(request, 'ps_pdfbase.html', context_dict, returned_file_name)

generate_pdf 関数

...
myfile = StringIO()
result_obj = pisa.CreatePDF(file_data, myfile)

logging.debug('pdf result_obj:\n\tsize:%s\n\terr:%s\n\tlog:%s\n\ttext:%s' % (myfile.tell(),
                                                                                result_obj.err,
                                                                                result_obj.log,
                                                                                result_obj.text, )) 
myfile.seek(0)
response =  HttpResponse(myfile, mimetype='application/pdf')    
logging.debug('response content: %s' % response.content)
response['Content-Disposition'] = 'attachment; filename=' + slugify(returned_file_name) + '.pdf'
return response
4

1 に答える 1

1

別のアプローチとして、応答を作成してから、直接 pisa に渡しますか?

response = http.HttpResponse(mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=%s' % filename
pisa.CreatePDF(file_data, response) 
return response

ファイルを保存して、Nginx X-Accel-Redirect 経由で提供することに決めましたか? -完全を期すために、その例を次に示します。

ジャンゴ ビュー:

resp = http.HttpResponse()
resp['Content-Type'] = 'application/pdf'
resp['Content-Disposition'] = 'attachment; filename=filename.pdf'
resp['X-Accel-Redirect'] = '/xaccel_path/%s' % relative_path_to_file
return resp

nginx 構成:

server { 
...
location /xaccel_path {
internal;
alias /path/to/protected/files/;
}
}
于 2013-02-24T11:19:12.887 に答える