Jedes Mal, wenn ich versuche, ein riesiges Json-Objekt (enthält Bilder base64) über das Netzwerk an meinen Knoten js server.Ich bekomme dieseNode js - So senden Sie Anfrage in kleinen Datenblock (Fehler: Request Entity zu groß)
Error: request entity too large
Es gibt Lösung wie diese link (Stackoverflow Frage), die die Grenze für den Knoten js Server zu erhöhen, empfehlen. Ich suche eine Client-seitige Lösung. Gibt es eine Möglichkeit, die gesendeten Daten abzubrechen und den Server warten zu lassen, um alle Pakete zu empfangen und dann zu verarbeiten? (Versprechen?)
Hypothetisch gesprochen, wenn meine Dateien 20mb ist, auch wenn mein Limit auf 5mb eingestellt ist, werde ich in der Lage sein, es zu senden, es wird nur mehr Zeit brauchen. Ist es möglich? Können Sie mich bitte auf die richtige Spur bringen?
ich auf der Rückseite Endseite
Hier einige Code express bin mit Bezug zu nehmen:
//AJAX CALL
var promise = $.Deferred();
$.ajax('/module/report/ddl',{
data: {
widget: JSON.stringify(widget), <--- large, very large
filename: filename,
username: username,
reportname: reportName
},
type: 'POST',
success: function(result){
//Do something
promise.resolve(result);
},
error :function(err) {
/* Act on the event */
promise.reject(err);
}
});
return promise;
}
Hier ist meine Server-Seite
router.route('/ddl').post(ddlReport));
function ddlReport(req, res){
var filename = req.body.filename;
var widgets = req.body.widget; <--- Once again large
var username = req.body.username;
ctrl.ddlProcess(widgets,filename,title,username,function(err, result){
if(err){
res.status(422).send(err);
}else {
res.send(result);
}
});
}
Wenn Sie brauche mehr Informationen, lass es mich wissen! Ich versuche eine Lösung zu finden, die am besten ist, auch wenn es nicht die ist, die ich vorgeschlagen habe!
Vielen Dank für Ihre Zeit! Hab einen guten Tag!
1) eine Synchronisierungsanforderung an den Server senden, damit die Dateiübertragung gewährleistet ist. Eine asynchrone Anfrage würde den Benutzer nicht daran hindern, zu einer anderen URL zu gehen und Ihren langen Upload zu beenden. 2) Express muss hier nichts tun. Sie können das Ergebnis von JSON.stringify durch eine Länge (sagen wir 5.000.000 Bytes) brechen, jeden Chunk in serieller Reihenfolge benennen und auf dem Server addieren (Sie müssten diese Chunks in Ihrer Sitzung speichern). 3) Verwenden Sie ein Flag, um den letzten Teil der Datei zu kennen. wie totalChunkCount oder lastChunk = true –
1) Also füge ich einfach async hinzu: false zu meinem Ajax-Call, oder? 2 & 3) Ich bin neu auszudrücken, aber ich werde prüfen, wie ich meine Daten in der Benutzersitzung speichern kann. Und wenn es den letzten Brocken bekommen hat, führt es den Prozess aus, es macht Sinn, danke! – TheOneWhoMightKnow
Ja, Sie sollten Sitzungen dafür verwenden. Überprüfen Sie diese https://github.com/expressjs/session. habe auch einen Backstore wie redis oder mongodb und du bist gut zu gehen. –