@@ -255,6 +255,32 @@ const readSection = (filename, file, offset, size, callback) => {
255
255
} ) ;
256
256
} ;
257
257
258
+ const writeBuffers = ( fileHandle , buffers , callback ) => {
259
+ const stream = fs . createWriteStream ( null , {
260
+ fd : fileHandle ,
261
+ autoClose : false
262
+ } ) ;
263
+ let index = 0 ;
264
+
265
+ const doWrite = function ( ) {
266
+ let canWriteMore = true ;
267
+ while ( canWriteMore && index < buffers . length ) {
268
+ const chunk = buffers [ index ++ ] ;
269
+ canWriteMore = stream . write ( chunk ) ;
270
+ }
271
+
272
+ if ( index < buffers . length ) {
273
+ stream . once ( "drain" , doWrite ) ;
274
+ } else {
275
+ stream . end ( ) ;
276
+ }
277
+ } ;
278
+
279
+ stream . on ( "error" , err => callback ( err ) ) ;
280
+ stream . on ( "finish" , ( ) => callback ( null ) ) ;
281
+ doWrite ( ) ;
282
+ } ;
283
+
258
284
class FileMiddleware extends SerializerMiddleware {
259
285
/**
260
286
* @param {any[] } data data items
@@ -296,7 +322,7 @@ class FileMiddleware extends SerializerMiddleware {
296
322
mkdirp ( path . dirname ( filename ) , err => {
297
323
if ( err ) return reject ( err ) ;
298
324
fileManager . addJob ( filename , true , ( file , callback ) => {
299
- fs . writeFile ( file , Buffer . concat ( buffers ) , err => {
325
+ writeBuffers ( file , buffers , err => {
300
326
if ( err ) return callback ( err ) ;
301
327
resolve ( true ) ;
302
328
callback ( ) ;
0 commit comments