2014-05-03 14 views
5

chciałem utworzyć plik zip i przesłać go bez zapisywania pliku tymczasowego na dysku tak:można użyć gulp do utworzenia pliku zip i załadowania bez użycia pliku tymczasowego?

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

Ale to zgłasza błąd:

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) 

skończyło się go rozwiązać za pomocą dwóch zadania, ale nie jest to idealne:

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')); 
}); 

Czy można zastosować coś takiego jak pierwsze podejście z łykiem?

zależności:

npm install gulp-zip request 

dzięki.

Odpowiedz

1

Wygląda gulp-buffer powinien być w stanie rozwiązać problem:

Install haustem bufor i dodać go do gulpfile, po czym wstawić bufor między rozmowy zip i żądania.

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

Jestem po prostu ciekawy tego rozwiązania: czy naprawdę unika się IO na dysku i robi wszystko w pamięci (porąbane lub nie) lub po prostu przesyła ponownie dane podane na dysk? –

+0

@JairoAndresVelascoRomero możesz sprawdzić źródło na https://github.com/jeromew/gulp-buffer/blob/master/index.js - to zbiera wszystkie porcje i tworzy bufor z tą zawartością. Nie widzę niczego, co wskazuje na dostęp do systemu plików. –