4

Gunicornで実行されている静的Djangoファイルを提供するNginxがあります。私は MP3 ファイルを提供し、ヘッド 206 を取得して、Apple がポッドキャスティング用に受け入れるようにしようとしています。現時点では、オーディオ ファイルは静的ディレクトリにあり、Nginx を介して直接提供されます。これは私が得る応答です:

    HTTP/1.1 200 OK
    Server: nginx/1.2.1
    Date: Wed, 30 Jan 2013 07:12:36 GMT
    Content-Type: audio/mpeg
    Content-Length: 22094968
    Connection: keep-alive
    Last-Modified: Wed, 30 Jan 2013 05:43:57 GMT

バイト範囲が受け入れられるように、誰かが mp3 ファイルを提供する正しい方法を手伝ってくれますか?

更新:これは、Django を介してファイルを提供する私の見解のコードです。

    response = HttpResponse(file.read(), mimetype=mimetype)
    response["Content-Disposition"]= "filename=%s" % os.path.split(s)[1]
    response["Accept-Ranges"]="bytes"
    response.status_code = 206
    return response
4

3 に答える 3

2

静的 .mp3 ファイルの提供を担当nginxするディレクティブでのみこれを行いたい場合は、それらのディレクティブを追加します。location

# here you add response header "Content-Disposition"
# with value of "filename=" + name of file (in variable $request_uri),
# so for url example.com/static/audio/blahblah.mp3 
# it will be /static/audio/blahblah.mp3
# ----
set $sent_http_content_disposition filename=$request_uri;
    # or
add_header content_disposition filename=$request_uri;

# here you add header "Accept-Ranges"
set $sent_http_accept_ranges bytes;
# or
add_header accept_ranges bytes;

# tell nginx that final HTTP Status Code should be 206 not 200
return 206;
于 2013-01-30T20:09:10.840 に答える
1

nginx がこれらの静的ファイルの範囲要求をサポートするのを妨げる何かが設定に含まれています。標準の nginx モジュールを使用する場合、これは次のフィルターのいずれかになります (これらのフィルターは応答を変更し、要求本文の処理中に変更が発生する可能性がある場合、バイト範囲の処理は無効になります)。

これらすべてのモジュールには、動作する MIME タイプ ( 、 、gzip_types)gunzip_typesを制御するディレクティブがあります。デフォルトでは、それらは MIME タイプの制限付きのセットに設定されており、これらのモジュールが有効になっている場合でも、範囲リクエストはほとんどの静的ファイルに対して正常に機能します。しかし、次のようなものを配置しますaddition_typesssi_types

ssi on;
ssi_types *;

構成に追加すると、影響を受けるすべての静的ファイルのバイト範囲サポートが無効になります。

nginx の設定を確認して問題のある行を削除するか、mp3 ファイルを提供する場所で問題のモジュールをオフにしてください。

于 2014-06-27T19:18:31.723 に答える
0

独自のステータス コードを定義できます。

response = HttpResponse('this is my response data')
response.status_code = 206
return response

Django 1.5 を使用している場合は、新しい StreamingHttpResponse を参照してください。

https://docs.djangoproject.com/en/dev/ref/request-response/#streaminghttpresponse-objects

これは、大きなファイルの場合に非常に役立ちます。

于 2013-01-30T13:27:05.260 に答える