📚 API Documentation
UpBox fornece uma API RESTful simples para upload e gerenciamento de arquivos.
🔑 Limites e Regras
| Parâmetro | Valor | Descrição |
|---|---|---|
| Tamanho máximo | 200 MB | Limite por arquivo |
| Formatos aceitos | Todos | Exceto executáveis (.exe, .bat, .sh, etc) |
| Duração | Indefinido | Arquivos não expiram automaticamente |
| Rate Limit | Desabilitado | Sem limite de requisições no momento |
📡 Endpoints
POST /api/upload
Descrição: Upload de arquivos locais (multipart/form-data)
Request:
curl -X POST https://upbox.dfstech.shop/api/upload \
-F "files=@image.png" \
-F "files=@document.pdf"
Response (200 OK):
{
"success": true,
"data": {
"files": [
{
"success": true,
"file_id": 123,
"short_id": "AbC123",
"name": "image.png",
"status": "available",
"url": "https://upbox.dfstech.shop/files/AbC123.png"
}
]
}
}
Response (Erro):
{
"success": false,
"data": {
"files": [
{
"success": false,
"errors": ["Arquivo muito grande", "Tipo não permitido"]
}
]
}
}
POST /api/uploadByUrl
Descrição: Upload via URL pública
Request:
curl -X POST https://upbox.dfstech.shop/api/uploadByUrl \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/image.jpg"}'
Response (200 OK):
{
"success": true,
"data": {
"success": true,
"file_id": 124,
"short_id": "XyZ456",
"name": "image.jpg",
"status": "available",
"url": "https://upbox.dfstech.shop/files/XyZ456.jpg"
}
}
Response (Erro):
{
"success": false,
"message": "Erro ao baixar arquivo: Servidor retornou código HTTP 404"
}
GET /files/{shortId}.{ext}
Descrição: Acesso direto ao arquivo hospedado
Request:
curl https://upbox.dfstech.shop/files/AbC123.png -o downloaded.png
Response:
Retorna o arquivo diretamente com headers apropriados.
🔐 Segurança
- ✅ Validação de MIME por conteúdo (não apenas extensão)
- ✅ Bloqueio de executáveis (.exe, .bat, .sh, .cmd, etc)
- ✅ Proteção contra SSRF (URLs privadas bloqueadas)
- ✅ Proteção contra path traversal
- ✅ Nomes de arquivo aleatórios (short_id)
- ✅ Hash SHA-256 para detecção de duplicatas
⚠️ Erros Comuns
| Código HTTP | Mensagem | Solução |
|---|---|---|
| 400 | MIME type inválido | Tipo de arquivo não permitido |
| 400 | Arquivo muito grande | Reduzir para menos de 200MB |
| 413 | Request Entity Too Large | Nginx bloqueou (>200MB) |
| 404 | Arquivo não encontrado | Short ID inválido ou arquivo deletado |
📝 Exemplos Completos
JavaScript (Fetch API)
// Upload local
const formData = new FormData();
formData.append('files', fileInput.files[0]);
const response = await fetch('https://upbox.dfstech.shop/api/upload', {
method: 'POST',
body: formData
});
const result = await response.json();
console.log(result.data.files[0].url);
// Upload via URL
const response2 = await fetch('https://upbox.dfstech.shop/api/uploadByUrl', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ url: 'https://example.com/file.pdf' })
});
const result2 = await response2.json();
console.log(result2.data.url);
Python (requests)
import requests
# Upload local
files = {'files': open('image.png', 'rb')}
r = requests.post('https://upbox.dfstech.shop/api/upload', files=files)
print(r.json()['data']['files'][0]['url'])
# Upload via URL
data = {'url': 'https://example.com/file.pdf'}
r = requests.post('https://upbox.dfstech.shop/api/uploadByUrl', json=data)
print(r.json()['data']['url'])