Skip to content

Commit bee3289

Browse files
committed
Fixed download with weird file name
1 parent e3d23f9 commit bee3289

2 files changed

Lines changed: 13 additions & 17 deletions

File tree

WebStreamer/server/stream_routes.py

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from WebStreamer.bot import multi_clients, work_loads
1313
from WebStreamer.server.exceptions import FIleNotFound, InvalidHash
1414
from WebStreamer import Var, utils, StartTime, __version__, StreamBot
15+
from WebStreamer.utils import get_name
1516

1617
logger = logging.getLogger("routes")
1718

@@ -116,21 +117,11 @@ async def media_streamer(request: web.Request, message_id: int, secure_hash: str
116117
file_id, index, offset, first_part_cut, last_part_cut, part_count, chunk_size
117118
)
118119
mime_type = file_id.mime_type
119-
file_name = file_id.file_name
120+
file_name = get_name(file_id)
120121
disposition = "attachment"
121122

122-
if mime_type:
123-
if not file_name:
124-
try:
125-
file_name = f"{secrets.token_hex(2)}.{mime_type.split('/')[1]}"
126-
except (IndexError, AttributeError):
127-
file_name = f"{secrets.token_hex(2)}.unknown"
128-
else:
129-
if file_name:
130-
mime_type = mimetypes.guess_type(file_id.file_name)
131-
else:
132-
mime_type = "application/octet-stream"
133-
file_name = f"{secrets.token_hex(2)}.unknown"
123+
if not mime_type:
124+
mime_type = mimetypes.guess_type(file_name)[0] or "application/octet-stream"
134125

135126
if "video/" in mime_type or "audio/" in mime_type or "/html" in mime_type:
136127
disposition = "inline"

WebStreamer/utils/file_properties.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,17 @@ def get_hash(media_msg: Union[str, Message], length: int) -> str:
5858
return long_hash[:length]
5959

6060

61-
def get_name(media_msg: Message) -> str:
62-
media = get_media_from_message(media_msg)
63-
file_name = getattr(media, 'file_name', "") or ""
61+
def get_name(media_msg: Message | FileId) -> str:
62+
63+
if isinstance(media_msg, Message):
64+
media = get_media_from_message(media_msg)
65+
file_name = getattr(media, "file_name", "")
66+
67+
elif isinstance(media_msg, FileId):
68+
file_name = getattr(media_msg, "file_name", "")
6469

6570
if not file_name:
66-
if media_msg.media and media_msg.media.value:
71+
if isinstance(media_msg, Message) and media_msg.media:
6772
media_type = media_msg.media.value
6873
else:
6974
media_type = "file"

0 commit comments

Comments
 (0)