BlankTar

about | blog | works | photo

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になってるのにも注意。
< apache2のhttpd.confでURLの正規化をやってみたメモ。 pythonのwhooshで全文検索してみる >