13

いくつかのコンテンツで生成された txt ファイルを提供しようとしていますが、問題が発生しています。一時ファイルを作成し、NamedTemporaryFile を使用してコンテンツを書き込み、delete を 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
4

4 に答える 4

3

XSend にはファイルへのパスが必要な response['X-Sendfile'] ので、次のことができます。

response['X-Sendfile'] = smart_str(path_to_file)

ここにpath_to_file、ファイルへのフルパスがあります(ファイルの名前だけではありません)このdjango-snippetをチェックアウトしてください

于 2013-04-03T14:30:33.897 に答える
1

アプローチにはいくつかの問題がある可能性があります。

  • ファイルの内容をフラッシュする必要はありません。f.flush()上記のコメントに記載されているように追加してください
  • NamedTemporaryFile閉じるときに削除されるため、関数を終了したときに何が起こる可能性があるため、Web サーバーはそれを取得する機会がありません
  • 一時ファイル名は、Web サーバーが使用して送信するように構成されているパスの外にある可能性がありますX-Sendfile

一時ファイルを作成する代わりにStreamingHttpResponseを使用する方が良いかもしれませんX-Sendfile...

于 2013-04-03T14:43:55.687 に答える