@@ -94,21 +94,26 @@ export default class Blob extends EventTarget {
94
94
this . multipartBoundary = boundary
95
95
let parts = data . getParts ( )
96
96
let formArray = [ ]
97
- for ( let i in parts ) {
98
- formArray . push ( '\r\n--' + boundary + '\r\n' )
99
- let part = parts [ i ]
100
- for ( let j in part . headers ) {
101
- formArray . push ( j + ': ' + part . headers [ j ] + ';\r\n' )
97
+ if ( ! parts ) {
98
+ p = fs . writeFile ( this . _ref , '' , 'utf8' )
99
+ }
100
+ else {
101
+ for ( let i in parts ) {
102
+ formArray . push ( '\r\n--' + boundary + '\r\n' )
103
+ let part = parts [ i ]
104
+ for ( let j in part . headers ) {
105
+ formArray . push ( j + ': ' + part . headers [ j ] + ';\r\n' )
106
+ }
107
+ formArray . push ( '\r\n' )
108
+ if ( part . isRNFetchBlobPolyfill )
109
+ formArray . push ( part )
110
+ else
111
+ formArray . push ( part . string )
102
112
}
103
- formArray . push ( '\r\n' )
104
- if ( part . isRNFetchBlobPolyfill )
105
- formArray . push ( part )
106
- else
107
- formArray . push ( part . string )
113
+ log . verbose ( 'FormData array' , formArray )
114
+ formArray . push ( '\r\n--' + boundary + '--\r\n' )
115
+ p = createMixedBlobData ( this . _ref , formArray )
108
116
}
109
- log . verbose ( 'FormData array' , formArray )
110
- formArray . push ( '\r\n--' + boundary + '--\r\n' )
111
- p = createMixedBlobData ( this . _ref , formArray )
112
117
}
113
118
// if the data is a string starts with `RNFetchBlob-file://`, append the
114
119
// Blob data from file path
@@ -205,22 +210,25 @@ export default class Blob extends EventTarget {
205
210
* @param {string } contentType Optional, content type of new Blob object
206
211
* @return {Blob }
207
212
*/
208
- slice ( start :?number , end :?number , contentType :?string ) :Blob {
213
+ slice ( start :?number , end :?number , contentType = '' :?string ) :Blob {
209
214
if ( this . _closed )
210
215
throw 'Blob has been released.'
211
216
log . verbose ( 'slice called' , start, end, contentType )
212
217
let resPath = blobCacheDir + getBlobName ( )
213
218
let pass = false
214
219
log . debug ( 'fs.slice new blob will at' , resPath )
220
+ let result = new Blob ( RNFetchBlob . wrap ( resPath ) , { type : contentType } )
215
221
fs . slice ( this . _ref , resPath , start , end ) . then ( ( dest ) => {
216
222
log . debug ( 'fs.slice done' , dest )
223
+ result . _invokeOnCreateEvent ( )
217
224
pass = true
218
225
} )
219
226
. catch ( ( err ) => {
220
227
pass = true
221
228
} )
222
229
log . debug ( 'slice returning new Blob' )
223
- return new Blob ( RNFetchBlob . wrap ( resPath ) )
230
+
231
+ return result
224
232
}
225
233
226
234
/**
@@ -283,6 +291,8 @@ function createMixedBlobData(ref, dataArray) {
283
291
let size = 0
284
292
for ( let i in dataArray ) {
285
293
let part = dataArray [ i ]
294
+ if ( ! part )
295
+ continue
286
296
if ( part . isRNFetchBlobPolyfill ) {
287
297
args . push ( [ ref , part . _ref , 'uri' ] )
288
298
}
@@ -296,27 +306,14 @@ function createMixedBlobData(ref, dataArray) {
296
306
args . push ( [ ref , part , 'ascii' ] )
297
307
}
298
308
// start write blob data
299
- // return p.then(() => {
300
- for ( let i in args ) {
301
- p = p . then ( function ( written ) {
302
- let arg = this
303
- if ( written )
304
- size += written
305
- log . verbose ( 'mixed blob write' , args [ i ] , written )
306
- return fs . appendFile ( ...arg )
307
- } . bind ( args [ i ] ) )
308
- }
309
- return p . then ( ( ) => Promise . resolve ( size ) )
310
- // let promises = args.map((p) => {
311
- // log.verbose('mixed blob write', ...p)
312
- // return fs.appendFile.call(this, ...p)
313
- // })
314
- // return Promise.all(promises).then((sizes) => {
315
- // log.verbose('blob write size', sizes)
316
- // for(let i in sizes) {
317
- // size += sizes[i]
318
- // }
319
- // return Promise.resolve(size)
320
- // })
321
- // })
309
+ for ( let i in args ) {
310
+ p = p . then ( function ( written ) {
311
+ let arg = this
312
+ if ( written )
313
+ size += written
314
+ log . verbose ( 'mixed blob write' , args [ i ] , written )
315
+ return fs . appendFile ( ...arg )
316
+ } . bind ( args [ i ] ) )
317
+ }
318
+ return p . then ( ( ) => Promise . resolve ( size ) )
322
319
}
0 commit comments