Estoy obteniendo datos de diferentes API con la API de búsqueda de JavaScript. Pero, ¿cómo puedo saber cuántos bytes se envían en cada solicitud de análisis?
La solicitud puede ser en cualquier método. Sé que puedo obtener la cantidad de bytes recibidos con response.headers["content-length"] . Necesito encontrar una manera de obtener la cantidad de bytes enviados en la interfaz (navegador o dispositivo móvil usando React Native). Idealmente, sería el tamaño total de la solicitud, pero solo el tamaño del cuerpo de la solicitud sería suficiente.
Puede obtener el valor que se establecerá en el encabezado Content-Length leyendo el cuerpo de la Solicitud como texto y verificando la longitud de la cadena devuelta:
(async () => { const formdata = new FormData(); const file = new Blob(["data".repeat(1024)]) formdata.append("key", file) const req = new Request("/", { method: "POST", body: formdata }); // note that we .clone() the Request // so that we can still use the original one with fetch() console.log((await req.clone().text()).length); fetch(req); console.log("check the Network panel of your dev tools to see the sent header"); })();Sin embargo, esto solo se aplica a las solicitudes en las que se envía este encabezado, es decir, no a las solicitudes GET y HEAD.
Una solución rápida que utilicé: un pequeño middleware (uso Express ):
const socketBytes = new Map(); app.use((req, res, next) => { req.socketProgress = getSocketProgress(req.socket); next(); }); /** * return kb read delta for given socket */ function getSocketProgress(socket) { const currBytesRead = socket.bytesRead; let prevBytesRead; if (!socketBytes.has(socket)) { prevBytesRead = 0; } else { prevBytesRead = socketBytes.get(socket).prevBytesRead; } socketBytes.set(socket, {prevBytesRead: currBytesRead}) return (currBytesRead-prevBytesRead)/1024; } Y luego puede usar req.socketProgress en su middleware.