Carga confirmada

Envía fragmentos secuenciales con Fetch. Este ejemplo del mismo sitio usa el envelope predeterminado y un Blob generado de 1 MiB, no un archivo personal.

import { Http, ContentType, uploadConfirmed, type HttpUploadChunkReceipt } from "fetchzen";
const api = Http.create(`${location.origin}/api/examples/`, {
cache: false, secure: false,
});
const body = new Blob([new Uint8Array(1024 * 1024)]);
const result = await uploadConfirmed(body, {
sendChunk: async (chunk, { signal }) =>
(await api.post<Blob, HttpUploadChunkReceipt>("upload-chunk/", chunk, {
type: ContentType.APPLICATION_OCTET_STREAM, signal, retry: 0,
})).payload,
onUploadProgress: (progress) => console.log(progress),
});
console.log(result);
Prueba la solicitudCarga confirmada por el servidor
Parámetros de la solicitud

Solo Ejecutar envía una solicitud a la API de demostración de este sitio. Usa solo datos sintéticos; no envíes secretos ni archivos personales. Se cuentan los bytes de los archivos; no se almacenan.

Listo. No se ha enviado ninguna solicitud.

Resultado

Elige Ejecutar para ver la respuesta.
Registro de eventos
Todavía no hay eventos.

Cada POST /api/examples/upload-chunk/ lee como máximo 256 KiB del cuerpo binario real antes de devolver { data: { receivedBytes, stored: false } }. El demo cuenta y descarta bytes; no ensambla ni almacena archivos. El progreso empieza en 0% y solo avanza con recibos exactos, no al entregar bytes a Fetch. done: true significa recibos de bytes, no almacenamiento ni procesamiento.

El demo limita los archivos generados a 1 MiB. No hay persistencia ni reanudación. Usa datos sintéticos: las solicitudes pasan por Cloudflare. Fragmentos pequeños implican más solicitudes HTTP. Un endpoint de archivos completos requiere cambios del servidor para usar esta convención.

Continúa con producción y cancelación o carga directa de archivos.