Quantcast
Channel: Active questions tagged react-native+android - Stack Overflow
Viewing all articles
Browse latest Browse all 30343

How to solve "File name too long" while uploading local Image to Firestore and Firebase Storage in React Native?

$
0
0

I'm trying to upload local images to Cloud Firestore and Firebase storage.

The PACKAGES I'm using are

Here's the 2 functions I'm using:

export const uploadPost = async (postImageUri) => {        return new Promise(async(res, rej) => {                const fs = RNFetchBlob.fs;                fs.readFile(postImageUri,'hello','base64')                .then(async (data) => {                    console.log('data from RNFetchBlob', data);                    const storageRef = storage().ref(`posts/images`).child(`${data}`);                    try {                        storageRef.putFile(data,{contentType: 'image/jpeg'})                        .on(                            storage.TaskEvent.STATE_CHANGED,                            snapshot => {                                console.log('snapshot', snapshot.state);                                console.log('progress', (snapshot.bytesTransferred)/(snapshot.totalBytes)*100);                                if(snapshot.state === storage.TaskState.SUCCESS){                                    console.log('SUCCESS')                                }                            },                            error => {                                console.log('Image upload error', error);                                rej(error)                            },                            () => {                                storageRef.getDownloadURL()                                .then((downLoadUri) => {                                    console.log('File available at: ', downLoadUri);                                    // addPostInfo                                    res(downLoadUri)                                })                            }                        )                    }catch{err => console.log(err) }                })        } )}export const addPostInfo = async (post) => {    console.log('post.postImageUri in addPostInfo', post.postImageUri.slice(10))    const remoteUri = await uploadPost(post.postImageUri);    return new Promise((res, rej) => {        firestore()        .collection('posts')        .add({            id: post.id,            createdAt: post.date,            description: post.description,            image: remoteUri,            location: post.checkin_location        })        .then(ref => {            console.log('Finish adding in addPostInfo', ref)            res(ref)        })        .catch(err => rej(err))    })}

And in the main screen, I directly send the image's path to the addPostInfo:

const _onSharingPost = () => {        const postCreated = {            id: 'alkdgjhfa;oiughaoghus',            postImageUri: postImageUri,            date: _getCurrentDate(),            description: postDescription,            checkin_location: checkInLocation        }        postActions.addPostInfo(postCreated);    }

The path is like this:

content://com.google.android.apps.photos.contentprovider/0/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F58/ORIGINAL/NONE/image%2Fjpeg/950379202

ERROR

...base64 string --> File name too long

It got down to the SUCCESS part of the upLoadPost function but then still got error

I HAVE TRIED:

  • Change the path --> cut off the content://
  • Use XMLHttpRequest to send the blob to the upLoadPost to send that to the storage

As far as I know, the problem must be the base64 string converted from the image path. I know we need to change that to blob or something, but I don't know how. I can't find where this can be specified in rn-fetch-blob docs

PLEASE HELP ME


Viewing all articles
Browse latest Browse all 30343

Trending Articles