| @@ -1,3 +1,5 @@ | |||
| from urllib.parse import quote | |||
| from flask import Response | |||
| from flask_restful import Resource, reqparse # type: ignore | |||
| from werkzeug.exceptions import Forbidden, NotFound | |||
| @@ -46,7 +48,8 @@ class ToolFilePreviewApi(Resource): | |||
| if tool_file.size > 0: | |||
| response.headers["Content-Length"] = str(tool_file.size) | |||
| if args["as_attachment"]: | |||
| response.headers["Content-Disposition"] = f"attachment; filename={tool_file.name}" | |||
| encoded_filename = quote(tool_file.name) | |||
| response.headers["Content-Disposition"] = f"attachment; filename*=UTF-8''{encoded_filename}" | |||
| return response | |||
| @@ -4,6 +4,7 @@ import hmac | |||
| import logging | |||
| import os | |||
| import time | |||
| from collections.abc import Generator | |||
| from mimetypes import guess_extension, guess_type | |||
| from typing import Optional, Union | |||
| from uuid import uuid4 | |||
| @@ -215,7 +216,7 @@ class ToolFileManager: | |||
| return blob, tool_file.mimetype | |||
| def get_file_generator_by_tool_file_id(self, tool_file_id: str): | |||
| def get_file_generator_by_tool_file_id(self, tool_file_id: str) -> tuple[Optional[Generator], Optional[ToolFile]]: | |||
| """ | |||
| get file binary | |||