Der folgende Server-Code funktioniert gut für 5-GB-Datei mit wget http://localhost:11146/base/bigFile.zip
, aber nicht mit Client-Seitencode.Wie kann man große Dateien in NodeJS herunterladen?
Server-Seitencode.
var http = require("http");
var fs = require("fs");
var filename = "base/bigFile.zip";
var serv = http.createServer(function (req, res) {
var stat = fs.statSync(filename);
res.writeHeader(200, {"Content-Length": stat.size});
var fReadStream = fs.createReadStream(filename);
fReadStream.on('data', function (chunk) {
if(!res.write(chunk)){
fReadStream.pause();
}
});
fReadStream.on('end', function() {
res.end();
});
res.on("drain", function() {
fReadStream.resume();
});
});
serv.listen(1114);
Client-Seite Code anfordern Modul. Was ist falsch in diesem Code?
var request = require('request')
request('http:/localhost:11146/base/bigFile.zip', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
});
Fehler für Code über Client-Seite ist unter -
error: Error: Invalid protocol
at Request.init (/Users/air/Projects/node_modules/request/request.js:338:51)
at new Request (/Users/air/Projects//node_modules/request/request.js:105:8)
at request (/Users/air/Projects/Vertico/Vertico-CLI/node_modules/request/index.js:53:11)
at Object.<anonymous> (/Users/air/Projects/req.js:2:1)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Function.Module.runMain (module.js:605:10)
statusCode: undefined
body: undefined
I Client-Seite überarbeitet
wget
Shell-Prozess zu verwenden, anstelle von Anforderungspaket, das folgende Code ist, Das Problem ist - ich kann keinen guten Download-Fortschritt von wget sehen, keine Arbeit für diesen Code, so dass ich die Fortschrittsanzeige im Child-Prozess sehen kann.
const fs = require('fs');
const child_process = require('child_process');
var workerProcess = child_process.spawn('wget', ['-O','fdsf.zip', 'http://localhost:11146/base/bigFile.zip']);
workerProcess.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
workerProcess.stderr.on('data', function (data) {
//console.log('stderr: ' + data);
});
workerProcess.on('close', function (code) {
console.log('Download Completed' + code);
});
So schließlich möchte ich wissen, wie Sie eine Datei mit Client-seitigen Code in NodeJS geschrieben herunterladen?
danke. irgendwelche Hinweise, wie man den Fortschritt festhält? – irobo
Ich denke, Sie müssen zwischen dem Schreiben in die Datei tippen und einige Berechnungen mit der Inhaltslänge von Antwortheadern und den Bytes, die während jedes Ereignisses empfangen werden, machen. Es könnte Module geben, wenn ich auf eins stoße, werde Sie wissen lassen –
@ user2979152 Siehe diese Frage: https: // stackoverflow.com/questions/18323152/get-download-progress-in-node-js-mit-anfrage zum herunterladen mit fortschritte –