API Reference

Todas as rotas exigem o header x-api-key.

POST/api/upload

Descrição

Envia um arquivo via multipart/form-data para o bucket OCI.

Request — form-data

CampoTipoObrigatórioDescrição
fileFilesimArquivo a ser enviado
namestringnãoNome do objeto no bucket. Padrão: nome original do arquivo

Response 200

{ "success": true, "objectName": "imagens/foto.jpg" }

Testar

Clique para selecionar

Exemplo Flutter

import 'dart:io';
import 'package:http/http.dart' as http;

Future<void> uploadFile(File file) async {
  final uri = Uri.parse('https://seu-dominio.com/api/upload');

  final request = http.MultipartRequest('POST', uri)
    ..headers['x-api-key'] = 'SUA_API_KEY'
    ..files.add(await http.MultipartFile.fromPath(
      'file',
      file.path,
      filename: file.uri.pathSegments.last,
    ));

  final response = await request.send();

  if (response.statusCode == 200) {
    print('Upload realizado com sucesso!');
  } else {
    print('Erro no upload: ${response.statusCode}');
  }
}
POST/api/upload-base64

Descrição

Envia um arquivo codificado em base64 via application/json. Aceita base64 puro ou data URL.

Request — JSON body

CampoTipoObrigatórioDescrição
namestringsimNome do objeto no bucket
datastringsimConteúdo do arquivo em base64 ou data URL
content_typestringnãoMIME type. Padrão: application/octet-stream

Response 200

{ "success": true, "objectName": "imagens/foto.jpg" }

Testar

Exemplo Flutter

import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;

Future<void> uploadBase64(File file) async {
  final uri = Uri.parse('https://seu-dominio.com/api/upload-base64');
  final bytes = await file.readAsBytes();
  final base64Data = base64Encode(bytes);

  final response = await http.post(
    uri,
    headers: {
      'x-api-key': 'SUA_API_KEY',
      'Content-Type': 'application/json',
    },
    body: jsonEncode({
      'name': file.uri.pathSegments.last,
      'content_type': 'image/jpeg',
      'data': base64Data,
    }),
  );

  if (response.statusCode == 200) {
    print('Upload realizado com sucesso!');
  } else {
    print('Erro no upload: ${response.statusCode}');
  }
}
GET/api/download

Descrição

Gera uma URL temporária (Pre-Authenticated Request) para download direto do OCI. Válida por 1 hora.

Query params

CampoTipoObrigatórioDescrição
namestringsimNome do objeto no bucket

Response 200

{ "url": "https://objectstorage...", "expires_at": "2026-05-04T13:00:00.000Z" }

Testar

Exemplo Flutter

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<String> getDownloadUrl(String objectName) async {
  final uri = Uri.parse(
    'https://seu-dominio.com/api/download?name=${Uri.encodeComponent(objectName)}',
  );

  final response = await http.get(
    uri,
    headers: {'x-api-key': 'SUA_API_KEY'},
  );

  final body = jsonDecode(response.body);
  return body['url']; // URL temporária válida por 1 hora
}