Appearance
Загрузка Файла Потоком (Multipart)
POST /files/upload-by-stream
Загружает файл напрямую (multipart/form-data) на хостинг и возвращает постоянную ссылку. Это самый эффективный способ загрузки: файл передаётся байтами без base64-кодирования.
Максимальный размер: 100 МБ.
Лимит: 10 запросов / минуту.
Пример cURL:
bash
curl -X POST .../files/upload-by-stream \
-H "Authorization: Bearer ah_live_..." \
-F "file=@photo.jpg" \
-F "upload_path=my-refs"Базовый URL: https://api.aihere.ru/api/v1
Авторизация: Authorization: Bearer <API-ключ>
Rate-limit: 20 запросов/мин (upload-by-url), 10 запросов/мин (base64/stream)
Параметры
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
file | string | да | Файл для загрузки (JPEG, PNG, WebP, MP4 и др.) |
upload_path | string | — | Папка на хостинге по умолчанию: "developer-uploads" |
Примеры
bash
curl -X POST "https://api.aihere.ru/api/v1/files/upload-by-stream" \
-H "Authorization: Bearer $AIHERE_API_KEY" \
-F "file=@/path/to/image.jpg"python
import requests
with open("/path/to/image.jpg", "rb") as f:
resp = requests.post(
"https://api.aihere.ru/api/v1/files/upload-by-stream",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
timeout=60,
)
print(resp.json())javascript
const form = new FormData();
form.append("file", new Blob([fileBytes]), "image.jpg");
const resp = await fetch("https://api.aihere.ru/api/v1/files/upload-by-stream", {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}` },
body: form,
});
console.log(await resp.json());php
$ch = curl_init('https://api.aihere.ru/api/v1/files/upload-by-stream');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => ['file' => new CURLFile('/path/to/image.jpg')],
CURLOPT_HTTPHEADER => ["Authorization: Bearer $apiKey"],
]);
$resp = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($resp);Ответ 200
URL файла на хостинге
json
{
"file_url": "https://example.com/image.jpg",
"upload_path": "string"
}Ошибки
| Код | Причина |
|---|---|
| 400 | Файл не передан или превышен лимит размера (100 МБ) |
| 429 | Превышен rate-limit |
| 502 | Ошибка провайдера генерации |
| 422 | Ошибка валидации тела запроса (detail содержит список полей) |
| 401 | Нет или невалидный API-ключ |
