155 lines
3.6 KiB
Markdown
155 lines
3.6 KiB
Markdown
# 🚀 Upload API - Quick Start
|
||
|
||
**Быстрый старт для интеграции с Quoter Upload API**
|
||
|
||
## 🔗 Endpoints
|
||
|
||
```
|
||
Base URL: https://files.dscrs.site
|
||
GET / - Информация о пользователе
|
||
POST / - Загрузка файлов
|
||
GET /{filename} - Получение файла
|
||
```
|
||
|
||
## 🔐 Аутентификация
|
||
|
||
```http
|
||
Authorization: Bearer <jwt-token>
|
||
```
|
||
|
||
## 📤 Загрузка файла
|
||
|
||
### JavaScript
|
||
|
||
```javascript
|
||
async function uploadFile(file, token) {
|
||
const formData = new FormData();
|
||
formData.append('file', file);
|
||
|
||
const response = await fetch('https://files.dscrs.site/', {
|
||
method: 'POST',
|
||
headers: {
|
||
'Authorization': `Bearer ${token}`
|
||
},
|
||
body: formData
|
||
});
|
||
|
||
if (!response.ok) {
|
||
throw new Error(`Upload failed: ${response.status}`);
|
||
}
|
||
|
||
return await response.text(); // Возвращает filename
|
||
}
|
||
```
|
||
|
||
### Python
|
||
|
||
```python
|
||
import requests
|
||
|
||
def upload_file(file_path, token):
|
||
with open(file_path, 'rb') as f:
|
||
files = {'file': f}
|
||
headers = {'Authorization': f'Bearer {token}'}
|
||
|
||
response = requests.post(
|
||
'https://files.dscrs.site/',
|
||
headers=headers,
|
||
files=files
|
||
)
|
||
response.raise_for_status()
|
||
return response.text.strip()
|
||
```
|
||
|
||
### cURL
|
||
|
||
```bash
|
||
curl -X POST \
|
||
-H "Authorization: Bearer your-token" \
|
||
-F "file=@/path/to/file.jpg" \
|
||
https://files.dscrs.site/
|
||
```
|
||
|
||
## 📊 Информация о пользователе
|
||
|
||
```javascript
|
||
async function getUserInfo(token) {
|
||
const response = await fetch('https://files.dscrs.site/', {
|
||
headers: {
|
||
'Authorization': `Bearer ${token}`
|
||
}
|
||
});
|
||
|
||
return await response.json();
|
||
// { user_id, username, quota: { current_quota, max_quota, usage_percentage } }
|
||
}
|
||
```
|
||
|
||
## 📁 Получение файла
|
||
|
||
```javascript
|
||
async function getFile(filename, token) {
|
||
const response = await fetch(`https://files.dscrs.site/${filename}`, {
|
||
headers: {
|
||
'Authorization': `Bearer ${token}`
|
||
}
|
||
});
|
||
|
||
return await response.blob();
|
||
}
|
||
```
|
||
|
||
## 🚨 Лимиты
|
||
|
||
- **Размер файла**: 500 МБ максимум
|
||
- **Квота пользователя**: 12 ГБ максимум
|
||
- **Форматы**: изображения, аудио, видео, документы
|
||
|
||
## ❌ Коды ошибок
|
||
|
||
- `401` - Неверный токен
|
||
- `413` - Превышена квота или размер файла
|
||
- `415` - Неподдерживаемый формат
|
||
- `500` - Ошибка сервера
|
||
|
||
## 💡 Пример использования
|
||
|
||
```javascript
|
||
// Полный пример
|
||
const client = {
|
||
baseUrl: 'https://files.dscrs.site',
|
||
token: 'your-jwt-token',
|
||
|
||
async upload(file) {
|
||
const formData = new FormData();
|
||
formData.append('file', file);
|
||
|
||
const response = await fetch(`${this.baseUrl}/`, {
|
||
method: 'POST',
|
||
headers: { 'Authorization': `Bearer ${this.token}` },
|
||
body: formData
|
||
});
|
||
|
||
if (!response.ok) throw new Error(`Upload failed: ${response.status}`);
|
||
return await response.text();
|
||
},
|
||
|
||
async getUserInfo() {
|
||
const response = await fetch(`${this.baseUrl}/`, {
|
||
headers: { 'Authorization': `Bearer ${this.token}` }
|
||
});
|
||
return await response.json();
|
||
}
|
||
};
|
||
|
||
// Использование
|
||
const fileInput = document.getElementById('fileInput');
|
||
const file = fileInput.files[0];
|
||
const filename = await client.upload(file);
|
||
console.log(`Загружен: ${filename}`);
|
||
```
|
||
|
||
---
|
||
|
||
📚 **Полная документация**: [upload-client-guide.md](upload-client-guide.md)
|