Subir archivos
Sube archivos a un contenedor usando un POST multipart simple para archivos menores a 500 MB, o cargas divididas en partes para archivos más grandes. Ambos métodos requieren un slug de contenedor válido y autenticación.
Cuándo usar cada método
Carga simple
Archivos menores de 500 MB. Un POST multipart, el servidor almacena el archivo directamente.
Carga dividida
Archivos de 500 MB o más. Divididos en partes de 10 MB. El frontend envía lotes de hasta 5 partes por solicitud.
Carga simple
Envía una solicitud multipart/form-data a POST /files/:containerSlug/*path. El servidor guarda el archivo en la ruta solicitada.
const formData = new FormData();
formData.append('file', file);
const response = await fetch(
`https://bucket.dveloxsoft.com/api/files/${containerSlug}/${encodeURIComponent(path)}`,
{
method: 'POST',
headers: {
'Authorization': 'ApiKey <api_key>'
},
body: formData
}
);
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'Upload failed');
}
const result = await response.json();
console.log('Uploaded to:', result.path, result.size, 'bytes'); Carga dividida
Para archivos grandes, genera un fileId estable, divide el archivo en partes de 10 MB y envíalas en lotes a POST /files/:containerSlug/chunked. El servidor ensambla el archivo una vez que lleguen todas las partes.
const CHUNK_SIZE = 10 * 1024 * 1024; // 10 MB
const fileId = crypto.randomUUID();
const totalChunks = Math.ceil(file.size / CHUNK_SIZE);
for (let i = 0; i < totalChunks; i += 5) {
const batchIndices: number[] = [];
const batchChunks: Blob[] = [];
for (let j = i; j < Math.min(i + 5, totalChunks); j++) {
const start = j * CHUNK_SIZE;
const end = Math.min(start + CHUNK_SIZE, file.size);
batchIndices.push(j);
batchChunks.push(file.slice(start, end));
}
const formData = new FormData();
batchChunks.forEach((chunk, idx) => {
formData.append('files', chunk, `${fileId}-${batchIndices[idx]}`);
});
formData.append('fileId', fileId);
formData.append('totalChunks', String(totalChunks));
formData.append('fileName', file.name);
formData.append('filePath', path);
formData.append('chunkIndices', batchIndices.join(','));
const response = await fetch(
`https://bucket.dveloxsoft.com/api/files/${containerSlug}/chunked`,
{
method: 'POST',
headers: {
'Authorization': 'ApiKey <api_key>'
},
body: formData
}
);
const data = await response.json();
console.log('Chunk batch progress:', data);
} Seguimiento de progreso con eventos
Usa la API Fetch con reportProgress: true para recibir eventos de progreso de carga. Mapea los eventos de progreso a un porcentaje y los eventos de respuesta al resultado final.
const response = await fetch(
`https://bucket.dveloxsoft.com/api/files/${containerSlug}/${path}`,
{
method: 'POST',
headers: {
'Authorization': 'ApiKey <api_key>'
},
body: formData,
signal: AbortSignal.timeout(30000)
}
);
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'Upload failed');
}
const result = await response.json();
console.log('Upload complete:', result);