generated from justuser-31/mrl_v1_license
Исправление кодировки не-английских букв.
This commit is contained in:
parent
3ba1ccf8e8
commit
d0edd7d459
15
handlers.py
15
handlers.py
@ -3,7 +3,7 @@ import os
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from http.server import BaseHTTPRequestHandler
|
from http.server import BaseHTTPRequestHandler
|
||||||
from urllib.parse import parse_qs, urlparse
|
from urllib.parse import parse_qs, unquote, urlparse
|
||||||
|
|
||||||
import database
|
import database
|
||||||
from config import get_storage_root, load_config
|
from config import get_storage_root, load_config
|
||||||
@ -289,14 +289,19 @@ class FileServerHandler(BaseHTTPRequestHandler):
|
|||||||
self.send_redirect("/files")
|
self.send_redirect("/files")
|
||||||
|
|
||||||
def handle_file_download(self, username, filename):
|
def handle_file_download(self, username, filename):
|
||||||
|
# Decode URL-encoded filename
|
||||||
|
# For example when we have not default symbols: %D1%80%D0%B8%D0%BD%D0%B3%D1%82%D0%BE%D0%BD.mp3
|
||||||
|
decoded_filename = unquote(filename)
|
||||||
|
|
||||||
user_dir = os.path.join(get_storage_root(), username)
|
user_dir = os.path.join(get_storage_root(), username)
|
||||||
filepath = os.path.join(user_dir, filename)
|
filepath = os.path.join(user_dir, decoded_filename)
|
||||||
|
print(filepath)
|
||||||
|
|
||||||
if not os.path.exists(filepath) or not os.path.isfile(filepath):
|
if not os.path.exists(filepath) or not os.path.isfile(filepath):
|
||||||
self.send_html("<h1>File not found</h1>", 404)
|
self.send_html("<h1>File not found</h1>", 404)
|
||||||
return
|
return
|
||||||
|
|
||||||
mime_type, _ = mimetypes.guess_type(filename)
|
mime_type, _ = mimetypes.guess_type(decoded_filename)
|
||||||
if not mime_type:
|
if not mime_type:
|
||||||
mime_type = "application/octet-stream"
|
mime_type = "application/octet-stream"
|
||||||
|
|
||||||
@ -306,9 +311,9 @@ class FileServerHandler(BaseHTTPRequestHandler):
|
|||||||
if mime_type.startswith(("image/", "video/", "audio/")):
|
if mime_type.startswith(("image/", "video/", "audio/")):
|
||||||
disposition = "inline"
|
disposition = "inline"
|
||||||
else:
|
else:
|
||||||
disposition = f'attachment; filename="{filename}"'
|
disposition = f"attachment; filename*=UTF-8''{quote(decoded_filename)}"
|
||||||
else:
|
else:
|
||||||
disposition = f'attachment; filename="{filename}"'
|
disposition = f"attachment; filename*=UTF-8''{quote(decoded_filename)}"
|
||||||
|
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header("Content-Type", mime_type)
|
self.send_header("Content-Type", mime_type)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user