いくつかのコンテンツで生成されたtxtファイルを提供しようとしていますが、いくつか問題があります。一時ファイルを作成し、NamedTemporaryFileを使用してコンテンツを書き込み、削除をfalseに設定してデバッグしましたが、ダウンロードしたファイルには何も含まれていません。
私の推測では、応答値が正しいファイルを指していないため、何もダウンロードされていません。コードは次のとおりです。
f = NamedTemporaryFile()
f.write(p.body)
response = HttpResponse(FileWrapper(f), mimetype='application/force-download')
response['Content-Disposition'] = 'attachment; filename=test-%s.txt' % p.uuid
response['X-Sendfile'] = f.name
次のように、response
を介してp.body
を送信することを検討しましたか。
response = HttpResponse(mimetype='text/plain')
response['Content-Disposition'] = 'attachment; filename="%s.txt"' % p.uuid
response.write(p.body)
XSendには、response['X-Sendfile']
内のファイルへのパスが必要です。したがって、次のことができます。
response['X-Sendfile'] = smart_str(path_to_file)
ここで、path_to_file
はファイルへのフルパスです(ファイルの名前だけではありません)これをチェックアウトしてください Django-snippet
import urllib2;
url ="http://chart.apis.google.com/chart?cht=qr&chs=300x300&chl=s&chld=H|0";
opener = urllib2.urlopen(url);
mimetype = "application/octet-stream"
response = HttpResponse(opener.read(), mimetype=mimetype)
response["Content-Disposition"]= "attachment; filename=aktel.png"
return response
あなたのアプローチにはいくつかの問題がある可能性があります。
f.flush()
を追加してください。NamedTemporaryFile
は閉じると削除されます。関数を終了すると同時に何が起こる可能性があるため、Webサーバーはそれを取得する機会がありません。X-Sendfile
を使用して送信するように構成されているパスから外れている可能性があります一時ファイルとX-Sendfile
..を作成する代わりに、 StreamingHttpResponse を使用する方がよいかもしれません。