flaskでContent-Rangeを返す
flaskっていうpython用のwebマイクロフレームワークを最近触ってたりして。
いやー、楽でいい。 Djangoよりもpythonicな気がします。
というのはともかく。
audioタグを使って音楽プレイヤー的なものを作って遊んでいたのですが、シークが出来ず。
色々調べていたら、どうやらhttpのRangeリクエストというのに答えなきゃいけないらしい。 という訳で、実装してみました。
def GetFile(fname): mimeType, enc = mimetypes.guess_type(fname) data = open(fname, 'rb').read() if 'Range' in flask.request.headers: start, end = flask.request.headers['Range'][len('bytes='):].split('-') try: start = int(start) except ValueError: start = 0 try: end = int(end) except ValueError: end = len(data) response = flask.Response(data[start:end], mimetype=mimeType, statut=206) response.headers.add_header('Content-Range', 'bytes {0}-{1}/{2}'.format(start, end-1, len(data))) return response return flask.Response(data, mimetype=mimeType)
だいたいこんな感じ。
ヘッダーに
Content-Range: bytes 開始位置-終了位置/本来のサイズ
を入れればいいみたい。
あとは、HTTPステータスコードが206になってるのにも注意。