function createMixedBlobData(ref, dataArray) {
  // create an empty file for store blob data
  let p = fs.writeFile(ref, '')
  let args = []
  let size = 0
  for(let i in dataArray) {
    let part = dataArray[i]
    if(!part)
      continue
    if(part.isRNFetchBlobPolyfill) {
      args.push([ref, part._ref, 'uri'])
    }
    else if(typeof part === 'string')
      args.push([ref, part, 'utf8'])
    // TODO : ArrayBuffer
    // else if (part instanceof ArrayBuffer) {
    //
    // }
    else if (Array.isArray(part))
      args.push([ref, part, 'ascii'])
  }
  // start write blob data
  for(let i in args) {
    p = p.then(function(written){
      let arg = this
      if(written)
        size += written
      log.verbose('mixed blob write', args[i], written)
      return fs.appendFile(...arg)
    }.bind(args[i]))
  }
  return p.then(() => Promise.resolve(size))
}
Create a file according to given array. The element in array can be a number,
Blob, String, Array.
@param  {string} ref File path reference
@param  {Array} dataArray An array contains different types of data.
@return {Promise}