WalleGriffkinder commited on
Commit
da6bb93
·
verified ·
1 Parent(s): 8a31883

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +120 -80
README.md CHANGED
@@ -18,62 +18,82 @@ pinned: false
18
 
19
  ## 🇷🇺 Прокси Telegram Bot API с расширенными инструментами
20
 
21
- Этот Space запускает локальный сервер Telegram Bot API и предоставляет многофункциональное Node.js приложение-прокси с дополнительными инструментами. Посетите корневой URL вашего Space для интерактивной документации.
22
 
23
- ### 1. Основные возможности
24
 
25
- * **Проксирование Telegram Bot API**: Доступ к локальному API через ваш Space URL.
26
- * **Расширенные ответы API**: Автоматическое добавление прямых и зашифрованных ссылок на скачивание/удаление файлов в ответы методов API, возвращающих информацию о файлах (например, `getMe`, `getFile`, `sendPhoto` и т.д.).
27
- * **Управление файлами**:
28
- * Статистика по файлам (количество, общий размер).
29
- * Скачивание файлов по ID или пути.
30
- * Удаление файлов по ID или пути.
31
- * Листинг файлов для конкретного бота.
32
- * **Зашифрованные ссылки с истечением срока действия**: Генерация временных, защищенных ссылок на скачивание.
33
- * **Автоматическая очистка кэша (TTL)**: Удаление старых файлов.
34
- * **Интеграция с GitHub Gist**: Сохранение информации о Space и URL инструментов в Gist.
35
 
36
- ### 2. Настройка
37
 
38
- #### 2.1. Необходимые секреты
39
 
40
- Добавьте следующие секреты в настройках вашего Space (`Settings -> Secrets`):
 
 
 
 
 
 
 
41
 
42
- * `TELEGRAM_API_ID`: Ваш API ID от Telegram.
43
- * `TELEGRAM_API_HASH`: Ваш API Hash от Telegram.
44
- * `GITHUB_USERNAME`: Ваш логин на GitHub (для обновления Gist).
45
- * `GITHUB_TOKEN`: Ваш Personal Access Token от GitHub с правом `gist`.
46
- * `ENV_GIST_ID`: ID вашего GitHub Gist для сохранения информации.
47
- * `LINK_ENCRYPTION_KEY`: Секретная фраза для шифрования ссылок (рекомендуется длинная случайная строка).
48
- * `DEFAULT_LINK_EXPIRY_HOURS` (опционально): Время жизни зашифрованных ссылок по умолчанию в часах (например, `24`). Значение `-1` означает бессрочные ссылки. По умолчанию: `24`.
49
 
50
- #### 2.2. Переменные окружения (можно переопределить через секреты)
51
 
52
- * `INTERNAL_TELEGRAM_API_PORT`: Внутренний порт для `telegram-bot-api` (по умолчанию: `8081`).
53
- * `TELEGRAM_DATA_DIR`: Каталог данных для `telegram-bot-api` (по умолчанию: `/var/lib/telegram-bot-api`).
54
- * `FILES_TTL`: Время жизни кэшированных файлов в часах для автоудаления (по умолчанию: `-1`, отключено).
55
- * `PROXY_TELEGRAM_PATH_PREFIX`: Префикс URL для проксирования Telegram API (по умолчанию: `/tg`).
 
 
 
56
 
57
- ### 3. Использование API
58
 
59
- **Посетите корневой URL вашего Space (`https://[YOUR_SPACE_URL]/`) для интерактивной документации по API.**
60
 
61
- Краткое описание:
62
 
63
- #### 3.1. Прокси Telegram Bot API
64
 
65
  * **URL**: `https://[YOUR_SPACE_URL]/tg/bot<YOUR_BOT_TOKEN>/<METHOD_NAME>`
66
- * **Описание**: ��спользуйте этот URL вместо стандартного `api.telegram.org`. Ответы API, содержащие информацию о файлах, будут автоматически дополнены полезными ссылками (прямые, зашифрованные, на удаление).
67
- * **Управление сроком действия ссылок**: Добавьте параметр `?link_expiry_hours=N` к URL проксируемого запроса.
68
 
69
- #### 3.2. Инструменты управления
70
 
71
- * **Статистика**: `https://[YOUR_SPACE_URL]/stats`
72
- * **Операции с файлами**: Базовый путь `https://[YOUR_SPACE_URL]/file` (см. документацию на корневом URL для деталей по эндпоинтам `/list`, `/<BOT_TOKEN>/getFile`, `/<BOT_TOKEN>/downloadFile`, и т.д.).
73
 
74
- ### 4. Информация в Gist
 
 
 
 
 
 
 
 
 
75
 
76
- Если настроено, информация о вашем Space и полезные URL будут автоматически обновляться в указанном GitHub Gist (файл `hf_space_telegram_bot_api_proxy_info.json`).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
  ---
79
  <br>
@@ -81,59 +101,79 @@ pinned: false
81
 
82
  ## 🇬🇧 Telegram Bot API Proxy & Tools
83
 
84
- This Space runs a local Telegram Bot API server and provides a feature-rich Node.js proxy application with additional tools. Visit the root URL of your Space for interactive documentation.
85
 
86
- ### 1. Core Features
87
 
88
- * **Telegram Bot API Proxying**: Access your local API via your Space URL.
89
- * **Enhanced API Responses**: Automatically augments API method responses that return file information (e.g., `getMe`, `getFile`, `sendPhoto`, etc.) with direct and encrypted download/delete links.
90
- * **File Management**:
91
- * File statistics (count, total size).
92
- * Download files by ID or path.
93
- * Delete files by ID or path.
94
- * List files for a specific bot.
95
- * **Encrypted Links with Expiry**: Generate temporary, secure download links.
96
- * **Automatic Cache Cleanup (TTL)**: Deletion of old files.
97
- * **GitHub Gist Integration**: Saves Space information and tool URLs to a Gist.
98
 
99
- ### 2. Setup
100
 
101
- #### 2.1. Necessary Secrets
102
 
103
- Add the following secrets in your Space settings (`Settings -> Secrets`):
 
 
 
 
 
 
 
104
 
105
- * `TELEGRAM_API_ID`: Your API ID from Telegram.
106
- * `TELEGRAM_API_HASH`: Your API Hash from Telegram.
107
- * `GITHUB_USERNAME`: Your GitHub login (for Gist updates).
108
- * `GITHUB_TOKEN`: Your GitHub Personal Access Token with `gist` scope.
109
- * `ENV_GIST_ID`: ID of your GitHub Gist for storing information.
110
- * `LINK_ENCRYPTION_KEY`: A secret passphrase for link encryption (a long random string is recommended).
111
- * `DEFAULT_LINK_EXPIRY_HOURS` (optional): Default expiry time for encrypted links in hours (e.g., `24`). A value of `-1` means no expiry. Default: `24`.
112
 
113
- #### 2.2. Environment Variables (can be overridden via secrets)
114
 
115
- * `INTERNAL_TELEGRAM_API_PORT`: Internal port for `telegram-bot-api` (default: `8081`).
116
- * `TELEGRAM_DATA_DIR`: Data directory for `telegram-bot-api` (default: `/var/lib/telegram-bot-api`).
117
- * `FILES_TTL`: Time-to-live for cached files in hours for auto-deletion (default: `-1`, disabled).
118
- * `PROXY_TELEGRAM_PATH_PREFIX`: URL prefix for proxying Telegram API calls (default: `/tg`).
 
 
 
119
 
120
- ### 3. API Usage
121
 
122
- **Visit the root URL of your Space (`https://[YOUR_SPACE_URL]/`) for interactive API documentation.**
123
 
124
- Brief overview:
125
 
126
- #### 3.1. Telegram Bot API Proxy
127
 
128
  * **URL**: `https://[YOUR_SPACE_URL]/tg/bot<YOUR_BOT_TOKEN>/<METHOD_NAME>`
129
- * **Description**: Use this URL instead of the standard `api.telegram.org`. API responses containing file information will be automatically augmented with useful links (direct, encrypted, delete).
130
- * **Link Expiry Management**: Add a `?link_expiry_hours=N` query parameter to the proxied request URL.
131
-
132
- #### 3.2. Management Tools
133
-
134
- * **Statistics**: `https://[YOUR_SPACE_URL]/stats`
135
- * **File Operations**: Base path `https://[YOUR_SPACE_URL]/file` (see documentation at the root URL for details on endpoints like `/list`, `/<BOT_TOKEN>/getFile`, `/<BOT_TOKEN>/downloadFile`, etc.).
136
-
137
- ### 4. Gist Information
138
-
139
- If configured, information about your Space and useful URLs will be automatically updated in the specified GitHub Gist (file `hf_space_telegram_bot_api_proxy_info.json`).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
 
19
  ## 🇷🇺 Прокси Telegram Bot API с расширенными инструментами
20
 
21
+ Этот Space запускает локальный сервер Telegram Bot API (на основе официальной сборки TDLib) и предоставляет многофункциональное Node.js приложение-прокси с дополнительными инструментами для управления файлами и генерации ссылок.
22
 
23
+ **Посетите корневой URL вашего Space для интерактивной документации по API.**
24
 
25
+ ### 1. Конфигурация
 
 
 
 
 
 
 
 
 
26
 
27
+ #### 1.1. Секреты (Обязательные и Опциональные)
28
 
29
+ Эти переменные должны быть установлены как "Secrets" в настройках вашего Hugging Face Space (`Settings -> Secrets`).
30
 
31
+ | Переменная | Обязательность | Описание | Пример значения |
32
+ | :-------------------------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------- |
33
+ | `TELEGRAM_API_ID` | **Обязательно** | Ваш API ID, полученный от Telegram (my.telegram.org). | `1234567` |
34
+ | `TELEGRAM_API_HASH` | **Обязательно** | Ваш API Hash, полученный от Telegram. | `0123456789abcdef0123456789abcdef` |
35
+ | `GITHUB_TOKEN` | Опционально | Персональный токен доступа GitHub с правом `gist`. Необходим для автоматического обновления Gist с информацией о Space. | `ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |
36
+ | `ENV_GIST_ID` | Опционально | ID существующего GitHub Gist, в который будет записываться информация. Требуется, если указан `GITHUB_TOKEN`. | `abcdef0123456789abcdef0123456789` |
37
+ | `LINK_ENCRYPTION_KEY` | Опционально | Секретная фраза для шифрования полезной нагрузки в ссылках `/downloadEncrypted`. Если не указана, генерация зашифрованных ссылок отключена. | `ОченьДлинныйИСлучайныйКлюч123!` |
38
+ | `GITHUB_USERNAME` | Опционально | Ваш логин на GitHub. Используется для формирования ссылки на Gist. Если не указан, но `GITHUB_TOKEN` и `ENV_GIST_ID` есть, Gist все равно будет обновляться. | `ваш_логин_github` |
39
 
40
+ #### 1.2. Переменные Окружения (Настраиваемые с Значениями по Умолчанию)
 
 
 
 
 
 
41
 
42
+ Эти переменные можно переопределить, добавив их в "Secrets" вашего Space. Если они не переопределены, используются значения по умолчанию.
43
 
44
+ | Переменная | По умолчанию | Описание |
45
+ | :----------------------------- | :----------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
46
+ | `INTERNAL_TELEGRAM_API_PORT` | `8081` | Внутренний порт, на котором запускается сам процесс `telegram-bot-api`. Node.js приложение проксирует запросы на этот порт. |
47
+ | `TELEGRAM_DATA_DIR` | `/var/lib/telegram-bot-api` | Директория на сервере, где `telegram-bot-api` хранит свои данные, включая кэшированные файлы. |
48
+ | `FILES_TTL` | `-1` | Время жизни (TTL) для файлов в кэше `TELEGRAM_DATA_DIR` в часах. Файлы старше этого времени будут периодически удаляться. Значение `-1` отключает автоматическую очистку. |
49
+ | `PROXY_TELEGRAM_PATH_PREFIX` | `/tg` | URL-префикс, по которому будет доступен "чистый" прокси к Telegram Bot API. Например, `https://[SPACE_URL]/tg/bot<TOKEN>/METHOD`. |
50
+ | `DEFAULT_LINK_EXPIRY_HOURS` | `24` | Время жизни по умолчанию в часах для генерируемых зашифрованных ссылок (через эндпоинт `/file/.../getFile` или при автоматическом расширении ответов). Значение `-1` означает бессрочные ссылки. |
51
 
52
+ ### 2. Основные возможности и эндпоинты
53
 
54
+ **Посетите корневой URL вашего Space (`https://[YOUR_SPACE_URL]/`) для интерактивной HTML-документации по всем эндпоинтам.**
55
 
56
+ Ниже приведено краткое описание:
57
 
58
+ #### 2.1. "Чистый" Прокси Telegram Bot API
59
 
60
  * **URL**: `https://[YOUR_SPACE_URL]/tg/bot<YOUR_BOT_TOKEN>/<METHOD_NAME>`
61
+ * **Описание**: Прямое проксирование запросов к вашему локальному экземпляру Telegram Bot API. Возвращает **неизмененный** ответ от API. Используйте этот эндпоинт, если вам нужен стандартный ответ API без каких-либо дополнений.
 
62
 
63
+ #### 2.2. Расширенные Инструменты и Операции с Файлами
64
 
65
+ ##### Базовый путь для файловых операций: `https://[YOUR_SPACE_URL]/file`
 
66
 
67
+ 1. **Получение информации о файле с дополнительными ссылками:**
68
+ * **Эндпоинт**: `GET /file/<YOUR_BOT_TOKEN>/getFile?file_id=<FILE_ID>`
69
+ * **Описание**: Делает запрос к локальному Telegram API (`getFile`), получает стандартный ответ и **дополняет** его следующими полями:
70
+ * `direct_download_link_by_path`: Прямая ссылка для скачивания файла по его относительному пути в кэше.
71
+ * `direct_download_link_by_id`: Прямая ссылка для скачивания файла через эндпоинт `/downloadFile`.
72
+ * `delete_link_by_path`: Ссылка для удаления файла по его относительному пути в кэше.
73
+ * `delete_link_by_id`: Ссылка для удаления файла по его ID.
74
+ * `encrypted_download_link_by_path` (если `LINK_ENCRYPTION_KEY` установлен): Зашифрованная ссылка на скачивание по пути с ограниченным сроком действия.
75
+ * `encrypted_download_link_by_id` (если `LINK_ENCRYPTION_KEY` установлен): Зашифрованная ссылка на скачивание по ID с ограниченным сроком действия.
76
+ * **Параметр `link_expiry_hours`**: Можно добавить к запросу (например, `?file_id=...&link_expiry_hours=2`), чтобы указать время жизни для генерируемых зашифрованных ссылок (в часах, `-1` для бессрочных). По умолчанию используется `DEFAULT_LINK_EXPIRY_HOURS`.
77
 
78
+ 2. **Другие файловые операции**:
79
+ * `GET /stats`: Статистика по файлам в `TELEGRAM_DATA_DIR`.
80
+ * Опциональный query-параметр `run_ttl_now=true` для немедленного запуска очистки старых файлов.
81
+ * `GET /list?token=<YOUR_BOT_TOKEN>`: Список файлов для указанного бота с размерами.
82
+ * `GET /<YOUR_BOT_TOKEN>/downloadFile?file_id=<FILE_ID>`: Скачать файл по ID.
83
+ * `GET /<RELATIVE_PATH_INCLUDING_BOT_TOKEN_DIR>`: Скачать файл по его полному относительному пути в кэше (например, `/bot123:abc/photos/file_0.jpg`).
84
+ * `GET /downloadEncrypted?payload=<ENCRYPTED_PAYLOAD>`: Скачать файл по зашифрованной полезной нагрузке (полученной из эндпоинта `getFile`).
85
+ * `GET /deleteFile?file=<RELATIVE_PATH_INCLUDING_BOT_TOKEN_DIR>`: Удалить файл по его полному относительному пути.
86
+ * `GET /<YOUR_BOT_TOKEN>/deleteById?file_id=<FILE_ID>`: Удалить файл по ID.
87
+
88
+ ### 3. Информация в Gist
89
+
90
+ Если настроены `GITHUB_TOKEN` и `ENV_GIST_ID`, информация о вашем Space (включая полезные URL) будет автоматически обн��вляться в указанном GitHub Gist (в файле с именем `hf_space_telegram_bot_api_proxy_info.json`).
91
+
92
+ ### 4. Важно о путях к файлам
93
+
94
+ * Локальный `telegram-bot-api` обычно сохраняет файлы в подкаталоге, названном в честь токена бота (например, `/var/lib/telegram-bot-api/bot123:abc/...`). Файлы в этом кэше могут не иметь расширений или иметь числовые суффиксы.
95
+ * Относительные пути, используемые в URL инструментов (например, для скачивания или удаления по пути), должны включать эту структуру каталога токена: `bot<TOKEN>/<category>/<filename_in_cache>`.
96
+ * При скачивании файлов приложение пытается установить корректный `Content-Disposition` и `Content-Type` для лучшего взаимодействия с браузером.
97
 
98
  ---
99
  <br>
 
101
 
102
  ## 🇬🇧 Telegram Bot API Proxy & Tools
103
 
104
+ This Space runs a local Telegram Bot API server (based on the official TDLib build) and provides a feature-rich Node.js proxy application with additional tools for file management and link generation.
105
 
106
+ **Visit the root URL of your Space for interactive API documentation.**
107
 
108
+ ### 1. Configuration
 
 
 
 
 
 
 
 
 
109
 
110
+ #### 1.1. Secrets (Required and Optional)
111
 
112
+ These variables must be set as "Secrets" in your Hugging Face Space settings (`Settings -> Secrets`).
113
 
114
+ | Variable | Requirement | Description | Example Value |
115
+ | :-------------------------- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------- |
116
+ | `TELEGRAM_API_ID` | **Required** | Your API ID obtained from Telegram (my.telegram.org). | `1234567` |
117
+ | `TELEGRAM_API_HASH` | **Required** | Your API Hash obtained from Telegram. | `0123456789abcdef0123456789abcdef` |
118
+ | `GITHUB_TOKEN` | Optional | GitHub Personal Access Token with `gist` scope. Needed for automatic Gist updates with Space information. | `ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx` |
119
+ | `ENV_GIST_ID` | Optional | ID of an existing GitHub Gist where information will be written. Required if `GITHUB_TOKEN` is provided. | `abcdef0123456789abcdef0123456789` |
120
+ | `LINK_ENCRYPTION_KEY` | Optional | Secret passphrase for encrypting payloads in `/downloadEncrypted` links. If not set, encrypted link generation is disabled. | `AVeryLongAndRandomKey123!` |
121
+ | `GITHUB_USERNAME` | Optional | Your GitHub username. Used for forming the Gist link. If not set, but `GITHUB_TOKEN` and `ENV_GIST_ID` are, Gist will still be updated. | `your_github_username` |
122
 
123
+ #### 1.2. Environment Variables (Configurable with Defaults)
 
 
 
 
 
 
124
 
125
+ These variables can be overridden by adding them to your Space "Secrets". If not overridden, default values are used.
126
 
127
+ | Variable | Default Value | Description |
128
+ | :----------------------------- | :----------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
129
+ | `INTERNAL_TELEGRAM_API_PORT` | `8081` | The internal port on which the `telegram-bot-api` process itself runs. The Node.js application proxies requests to this port. |
130
+ | `TELEGRAM_DATA_DIR` | `/var/lib/telegram-bot-api` | The directory on the server where `telegram-bot-api` stores its data, including cached files. |
131
+ | `FILES_TTL` | `-1` | Time-to-live (TTL) for files in the `TELEGRAM_DATA_DIR` cache, in hours. Files older than this will be periodically deleted. A value of `-1` disables automatic cleanup. |
132
+ | `PROXY_TELEGRAM_PATH_PREFIX` | `/tg` | The URL prefix where the "clean" proxy to the Telegram Bot API will be available. E.g., `https://[SPACE_URL]/tg/bot<TOKEN>/METHOD`. |
133
+ | `DEFAULT_LINK_EXPIRY_HOURS` | `24` | Default lifetime in hours for generated encrypted links (via the `/file/.../getFile` endpoint or when auto-augmenting responses). A value of `-1` means links do not expire. |
134
 
135
+ ### 2. Core Features & Endpoints
136
 
137
+ **Visit the root URL of your Space (`https://[YOUR_SPACE_URL]/`) for interactive HTML documentation of all endpoints.**
138
 
139
+ Below is a brief overview:
140
 
141
+ #### 2.1. "Clean" Telegram Bot API Proxy
142
 
143
  * **URL**: `https://[YOUR_SPACE_URL]/tg/bot<YOUR_BOT_TOKEN>/<METHOD_NAME>`
144
+ * **Description**: Directly proxies requests to your local Telegram Bot API instance. Returns the **unmodified** response from the API. Use this endpoint if you need the standard API response without any additions.
145
+
146
+ #### 2.2. Enhanced Tools & File Operations
147
+
148
+ ##### Base path for file operations: `https://[YOUR_SPACE_URL]/file`
149
+
150
+ 1. **Get File Info with Augmented Links:**
151
+ * **Endpoint**: `GET /file/<YOUR_BOT_TOKEN>/getFile?file_id=<FILE_ID>`
152
+ * **Description**: Makes a request to the local Telegram API (`getFile`), gets the standard response, and then **augments** it with the following fields:
153
+ * `direct_download_link_by_path`: Direct link to download the file by its relative path in the cache.
154
+ * `direct_download_link_by_id`: Direct link to download the file via the `/downloadFile` endpoint.
155
+ * `delete_link_by_path`: Link to delete the file by its relative path in the cache.
156
+ * `delete_link_by_id`: Link to delete the file by its ID.
157
+ * `encrypted_download_link_by_path` (if `LINK_ENCRYPTION_KEY` is set): Encrypted, time-limited download link by path.
158
+ * `encrypted_download_link_by_id` (if `LINK_ENCRYPTION_KEY` is set): Encrypted, time-limited download link by ID.
159
+ * **`link_expiry_hours` parameter**: Can be added to the request (e.g., `?file_id=...&link_expiry_hours=2`) to specify the lifetime for generated encrypted links (in hours, `-1` for indefinite). Defaults to `DEFAULT_LINK_EXPIRY_HOURS`.
160
+
161
+ 2. **Other File Operations**:
162
+ * `GET /stats`: Statistics for files in `TELEGRAM_DATA_DIR`.
163
+ * Optional query parameter `run_ttl_now=true` to immediately trigger cleanup of old files.
164
+ * `GET /list?token=<YOUR_BOT_TOKEN>`: List files for the specified bot with sizes.
165
+ * `GET /<YOUR_BOT_TOKEN>/downloadFile?file_id=<FILE_ID>`: Download a file by its ID.
166
+ * `GET /<RELATIVE_PATH_INCLUDING_BOT_TOKEN_DIR>`: Download a file by its full relative path in the cache (e.g., `/bot123:abc/photos/file_0.jpg`).
167
+ * `GET /downloadEncrypted?payload=<ENCRYPTED_PAYLOAD>`: Download a file using an encrypted payload (obtained from the `getFile` endpoint).
168
+ * `GET /deleteFile?file=<RELATIVE_PATH_INCLUDING_BOT_TOKEN_DIR>`: Delete a file by its full relative path.
169
+ * `GET /<YOUR_BOT_TOKEN>/deleteById?file_id=<FILE_ID>`: Delete a file by its ID.
170
+
171
+ ### 3. Gist Information
172
+
173
+ If `GITHUB_TOKEN` and `ENV_GIST_ID` are configured, information about your Space (including useful URLs) will be automatically updated in the specified GitHub Gist (in a file named `hf_space_telegram_bot_api_proxy_info.json`).
174
+
175
+ ### 4. Important Notes on File Paths
176
+
177
+ * The local `telegram-bot-api` typically saves files in a subdirectory named after the bot token (e.g., `/var/lib/telegram-bot-api/bot123:abc/...`). Files in this cache may not have extensions or may have numerical suffixes.
178
+ * Relative paths used in tool URLs (e.g., for download or delete by path) must include this bot token directory structure: `bot<TOKEN>/<category>/<filename_in_cache>`.
179
+ * When downloading files, the application attempts to set correct `Content-Disposition` and `Content-Type` headers for better browser interaction.