2014-05-03 10 views
5

Ich wollte eine Zip-Datei erstellen und laden Sie es ohne eine temporäre Datei auf der Festplatte wie das Schreiben so:möglich, Schluck zu verwenden, um eine Zip-Datei zu erstellen und ohne temporäre Datei hochladen?

gulp.task('zip-upload', function() { 
    return gulp.src('**/*', { cwd: 'out/', cwdbase: true }) 
    .pipe(zip('file.zip')) 
    .pipe(request.put('https://myurl.com')); 
}); 

Aber es wirft einen Fehler:

http.js:853 
    throw new TypeError('first argument must be a string or Buffer'); 

TypeError: first argument must be a string or Buffer 
    at ClientRequest.OutgoingMessage.write (http.js:853:11) 
    at Request.write (.../node_modules/request/request.js:1315:25) 

ich es zu lösen endete durch zwei mit Aufgaben, aber das ist nicht ideal:

gulp.task('zip', function() { 
    return gulp.src('**/*', { cwd: 'out/', cwdbase: true }) 
    .pipe(zip('file.zip')) 
    .pipe(gulp.dest('./')); 
}); 

gulp.task('upload', [ 'zip' ], function() { 
    fs.createReadStream('file.zip').pipe(request.put('https://myurl.com')); 
}); 

Ist es möglich, etwas wie die erste Annäherung mit Schluck zu verwenden?

Abhängigkeiten:

npm install gulp-zip request 

Dank.

Antwort

1

Es sieht aus wie gulp-buffer sollte Ihr Problem beheben können:

Installieren schluck-Puffer und fügen Sie sie gulpfile, danach den Puffer zwischen Ihrem Zip-Anruf und die Anforderung einfügen.

gulp.task('zip-upload', function() { 
    return gulp.src('**/*', { cwd: 'out/', cwdbase: true }) 
    .pipe(zip('file.zip')) 
    .pipe(buffer()) 
    .pipe(request.put('https://myurl.com')); 
}); 
+0

Ich bin nur neugierig auf diese Lösung: Ist das wirklich vermeidet die IO auf Festplatte und alles im Speicher (Chunked oder nicht) oder ist nur das Streaming der Daten auf die Festplatte? –

+0

@JairoAndresVelascoRomero Sie können die Quelle unter https://github.com/jeromew/gulp-buffer/blob/master/index.js überprüfen - es sammelt alle Chunks und erstellt einen Puffer mit diesem Inhalt. Ich sehe nichts, was auf Dateisystemzugriff hinweist. –