RNFetchBlob blob not being removed after close()

1.7k Views Asked by At

I am uploading an image from the local (ios) filesystem to Firebase using RNFetchBlob

Although my image is being deleted, my blob is remaining in the filesystem after closing it. I tried unlinking the blob but it still remains

function createBlob(uri, mediaType) {
  const Blob = RNFetchBlob.polyfill.Blob; 
  const typePrefix = isImage(mediaType) ? 'image' : 'video';  
  window.Blob = Blob;
  window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;  

  return new Promise((resolve, reject) => {
    const uid = guid();
    const mediaRef = firebase.storage().ref('users').child(`${uid}.${mediaType}`);
    let uploadBlob = null;

    Blob.build(uri, { type: `${typePrefix}/${mediaType}` })
    .then((blob) => {
      uploadBlob = blob;
      return mediaRef.put(blob, { type: `${typePrefix}/${mediaType}` });
    })
    .then((response) => {
      uploadBlob.close();

      resolve(response);
    })
    .catch(error => {
      reject(error);
    });
  });
}

This is how it looks in my simulator folder after closing the blob

enter image description here

After the createBlob I am deleting the file from local storage using RNFetchBlob.fs.unlink(path)

1

There are 1 best solutions below

4
On BEST ANSWER

I don't think you're close() is working because the uploadBlob variable was created in the previous closure, but not passed on to the next .then block. I'm thinking this might work...

Blob.build(uri, { type: `${typePrefix}/${mediaType}` })
.then((blob) => {
  uploadBlob = blob;
  return ({
     response: mediaRef.put(blob, { type: `${typePrefix}/${mediaType}` }),
     blob: uploadBlob
})
.then(({response, blob}) => {
  blob.close();

  resolve(response);
})