He intentado resolver esto pero fue en vano. Estoy subiendo un archivo a un servidor. entonces, estoy usando fs.readfilesync (ruta de ubicación del archivo) para leer el archivo. cuando consuelo. registro el resultado, obtengo un búfer. Mi objetivo es tratar de dividir este búfer en un tamaño de 10 mb en el sentido de que si alguien carga un archivo de 100 mb, necesito que ese archivo se divida con la fórmula 100 mb / 10 mb. De esta manera, puedo obtener fragmentos específicos que puedo enviar al servidor a la vez. Entonces, mi desafío es cómo subdividir este búfer en fragmentos. Hasta ahora esto es lo que he probado pero nada positivo:
buffer
Búfer (1011712) [6, 6, 237, 245, 216, 29, 70, 229, 189, 49, 239, 231, 254, 116, 183, 29, 68, 79, 67, 85, 77, 69, 78 , 84, 1, 112, 15, 0, 0, 16, 0, 0, 0, 4, 0, 0, 0, 3, 0, 0, 0, 141, 68, 59, 0, 0, 0, 0 , 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, …]
var fileToUpload = fs.readFileSync(folderPath) var len = fileToUpload.byteLength var fileToUploadBuf = new Uint16Array(fileToUpload) for (let i = 0; i < len;) { var chunk = fileToUploadBuf.slice(i, 'how do I get bytes size') if (chunk.length) { console.log('the lenght of chunk is', chunk) i += chunk.length } }No creo que sea posible de esta manera, creo que debe enviar el archivo a su servidor como Stream
Codificación de transferencia MDN
aquí adjunto un ejemplo de Node.Js del servidor que transmite el archivo al almacenamiento S3
Paquete.json
{ "name": "custom-server", "dependencies": { "express": "4.13.3", "request": "2.64.0", "multiparty": "4.1.2", "form-data": "1.0.0-rc3" } }Índice.js
var app = require("express")(); var multiparty = require("multiparty"); app.post("/submit", function(httpRequest, httpResponse, next){ var form = new multiparty.Form(); form.on("part", function(part){ if(part.filename) { var FormData = require("form-data"); var request = require("request") var form = new FormData(); form.append("thumbnail", part, {filename: part.filename,contentType: part["content-type"]}); var r = request.post("http://localhost:7070/store", { "headers": {"transfer-encoding": "chunked"} }, function(err, res, body){ httpResponse.send(res); }); r._form = form } }) form.on("error", function(error){ console.log(error); }) form.parse(httpRequest); }); app.get("/", function(httpRequest, httpResponse, next){ httpResponse.send("<form action='http://localhost:9090/submit' method='post' enctype='multipart/form-data'><input type='file' name='thumbnail' /><input type='submit' value='Submit' /></form>"); }); app.listen(9090);