Ich habe eine Methode gefunden, die funktioniert, aber möglicherweise nicht der ideale Ansatz ist.
Hier Ich rufe flow.write
in flow.post
wenn status
done
und currentTestChunk > numberOfChunks
ist. Ich mache das größer als überprüfen, weil manchmal flow.post
sendet status done
mehr als einmal wie erwähnt here.
Bearbeiten: Ich habe einen Weg hinzugefügt, um die Chunks nach dem Erstellen der Datei zu reinigen.
flow.post(req, function(status, filename, original_filename, identifier, currentTestChunk, numberOfChunks) {
console.log('POST', status, original_filename, identifier);
res.send(200);
if (status === 'done' && currentTestChunk > numberOfChunks) {
var stream = fs.createWriteStream('./tmp/' + filename);
//EDIT: I removed options {end: true} because it isn't needed
//and added {onDone: flow.clean} to remove the chunks after writing
//the file.
flow.write(identifier, stream, { onDone: flow.clean });
}
})
Ich hatte flow.post
‚s Rückruf senden currentTestChunk
und numberOfChunks
zu ändern.
Datei: Fluss node.js
$.post = function(req, callback){
//There's some codez here that we can overlook...
fs.rename(files[$.fileParameterName].path, chunkFilename, function(){
// Do we have all the chunks?
var currentTestChunk = 1;
var numberOfChunks = Math.max(Math.floor(totalSize/(chunkSize*1.0)), 1);
var testChunkExists = function(){
fs.exists(getChunkFilename(currentTestChunk, identifier), function(exists){
if(exists){
currentTestChunk++;
if(currentTestChunk>numberOfChunks) {
//Add currentTestChunk and numberOfChunks to the callback
callback('done', filename, original_filename, identifier, currentTestChunk, numberOfChunks);
} else {
// Recursion
testChunkExists();
}
} else {
//Add currentTestChunk and numberOfChunks to the callback
callback('partly_done', filename, original_filename, identifier, currentTestChunk, numberOfChunks);
}
});
}
testChunkExists();
});
} else {
callback(validation, filename, original_filename, identifier);
}
}
In flow.write Anruf flow.clean mit ondone, wenn Sie die Stücke entfernen möchten.
Super! Gibt es eine Chance, dass Sie einen PR zum flow.Js github repo einreichen können? Hier ist ein Link: https://github.com/flowjs/flow.js/issues/17#issuecomment-49737531 – flashpunk
Hey @flashpunk, ich werde das untersuchen, wenn ich eine Chance bekomme. – cleversprocket
Ich sehe nicht, wie die Überprüfung "If (currentTestChunk> numberOfChunks)" im Callback unmittelbar nach der ersten Überprüfung dazu beitragen kann, das Problem des Done-Status mehr als einmal zu lösen. –