@@ -94,21 +94,26 @@ export default class Blob extends EventTarget {
9494 this . multipartBoundary = boundary
9595 let parts = data . getParts ( )
9696 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 )
102112 }
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 )
108116 }
109- log . verbose ( 'FormData array' , formArray )
110- formArray . push ( '\r\n--' + boundary + '--\r\n' )
111- p = createMixedBlobData ( this . _ref , formArray )
112117 }
113118 // if the data is a string starts with `RNFetchBlob-file://`, append the
114119 // Blob data from file path
@@ -205,22 +210,25 @@ export default class Blob extends EventTarget {
205210 * @param {string } contentType Optional, content type of new Blob object
206211 * @return {Blob }
207212 */
208- slice ( start :?number , end :?number , contentType :?string ) :Blob {
213+ slice ( start :?number , end :?number , contentType = '' :?string ) :Blob {
209214 if ( this . _closed )
210215 throw 'Blob has been released.'
211216 log . verbose ( 'slice called' , start, end, contentType )
212217 let resPath = blobCacheDir + getBlobName ( )
213218 let pass = false
214219 log . debug ( 'fs.slice new blob will at' , resPath )
220+ let result = new Blob ( RNFetchBlob . wrap ( resPath ) , { type : contentType } )
215221 fs . slice ( this . _ref , resPath , start , end ) . then ( ( dest ) => {
216222 log . debug ( 'fs.slice done' , dest )
223+ result . _invokeOnCreateEvent ( )
217224 pass = true
218225 } )
219226 . catch ( ( err ) => {
220227 pass = true
221228 } )
222229 log . debug ( 'slice returning new Blob' )
223- return new Blob ( RNFetchBlob . wrap ( resPath ) )
230+
231+ return result
224232 }
225233
226234 /**
@@ -283,6 +291,8 @@ function createMixedBlobData(ref, dataArray) {
283291 let size = 0
284292 for ( let i in dataArray ) {
285293 let part = dataArray [ i ]
294+ if ( ! part )
295+ continue
286296 if ( part . isRNFetchBlobPolyfill ) {
287297 args . push ( [ ref , part . _ref , 'uri' ] )
288298 }
@@ -296,27 +306,14 @@ function createMixedBlobData(ref, dataArray) {
296306 args . push ( [ ref , part , 'ascii' ] )
297307 }
298308 // 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 ) )
322319}
0 commit comments