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
|
||||
from datetime import datetime
|
||||
from http.server import BaseHTTPRequestHandler
|
||||
from urllib.parse import parse_qs, urlparse
|
||||
from urllib.parse import parse_qs, unquote, urlparse
|
||||
|
||||
import database
|
||||
from config import get_storage_root, load_config
|
||||
@ -289,14 +289,19 @@ class FileServerHandler(BaseHTTPRequestHandler):
|
||||
self.send_redirect("/files")
|
||||
|
||||
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)
|
||||
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):
|
||||
self.send_html("<h1>File not found</h1>", 404)
|
||||
return
|
||||
|
||||
mime_type, _ = mimetypes.guess_type(filename)
|
||||
mime_type, _ = mimetypes.guess_type(decoded_filename)
|
||||
if not mime_type:
|
||||
mime_type = "application/octet-stream"
|
||||
|
||||
@ -306,9 +311,9 @@ class FileServerHandler(BaseHTTPRequestHandler):
|
||||
if mime_type.startswith(("image/", "video/", "audio/")):
|
||||
disposition = "inline"
|
||||
else:
|
||||
disposition = f'attachment; filename="{filename}"'
|
||||
disposition = f"attachment; filename*=UTF-8''{quote(decoded_filename)}"
|
||||
else:
|
||||
disposition = f'attachment; filename="{filename}"'
|
||||
disposition = f"attachment; filename*=UTF-8''{quote(decoded_filename)}"
|
||||
|
||||
self.send_response(200)
|
||||
self.send_header("Content-Type", mime_type)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user