mirror of
https://github.com/xhongc/music-tag-web.git
synced 2026-04-25 03:00:54 +08:00
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
import urllib.parse
|
|
from datetime import datetime
|
|
|
|
from django.conf import settings
|
|
from rest_framework.response import Response
|
|
|
|
from applications.subsonic.constants import EXTENSION_TO_MIMETYPE
|
|
|
|
|
|
def get_type_from_ext(path):
|
|
extension = path.split(".")[-1]
|
|
return EXTENSION_TO_MIMETYPE.get(extension)
|
|
|
|
|
|
def get_content_disposition(filename):
|
|
filename = f"filename*=UTF-8''{urllib.parse.quote(filename)}"
|
|
return f"attachment; {filename}"
|
|
|
|
|
|
def handle_serve(
|
|
track, user, _format=None, max_bitrate=None, proxy_media=True, download=False):
|
|
# we update the accessed_date
|
|
now = datetime.now()
|
|
track.accessed_date = now
|
|
track.save(update_fields=["accessed_date"])
|
|
file_path = track.path.replace(str(settings.BASE_DIR), "").encode("utf-8")
|
|
mt = track.mimetype
|
|
|
|
if mt:
|
|
response = Response(content_type=mt)
|
|
else:
|
|
response = Response()
|
|
mapping = {"nginx": "X-Accel-Redirect", "apache2": "X-Sendfile"}
|
|
file_header = mapping[settings.REVERSE_PROXY_TYPE]
|
|
response[file_header] = file_path
|
|
if download:
|
|
filename = track.name
|
|
response["Content-Disposition"] = get_content_disposition(filename)
|
|
if mt:
|
|
response["Content-Type"] = mt
|
|
|
|
return response
|