Android: Fetching Google Drive file paths in React Native

I’m working on an Android app using React Native. I can pick files from the device storage and Google Drive using react-native-document-picker. For local files, I can get the real path with react-native-get-real-path. But I’m stuck when it comes to Google Drive files.

Here’s what I’ve tried:

DocumentPicker.pick({
  type: [DocumentPicker.types.allFiles],
}).then((result) => {
  RNGRP.getRealPathFromURI(result.uri).then((filePath) => {
    console.log('File path:', filePath);
  }).catch((error) => {
    console.error('Error:', error);
  });
}).catch((error) => {
  console.error('Picker Error:', error);
});

This works fine for local files, but for Google Drive, I get a URI like:

content://com.google.android.apps.docs.storage/document/acc=1;doc=123

How can I get the actual file path for Google Drive files? Is there a way to download or access these files directly? Any help would be great!

Having worked extensively with React Native and Google Drive integration, I can confirm that getting direct file paths for Drive files is indeed tricky. Instead of focusing on file paths, I’ve found success using the react-native-blob-util library. It’s designed to handle content URIs efficiently.

Here’s a snippet that might help:

import RNFetchBlob from 'react-native-blob-util';

RNFetchBlob.fs.stat(result.uri)
  .then((stats) => {
    console.log('File size:', stats.size);
    return RNFetchBlob.fs.readFile(result.uri, 'base64');
  })
  .then((content) => {
    // Process or upload the file content
  })
  .catch((error) => console.error('Error:', error));

This approach bypasses the need for a file path altogether, allowing you to work directly with the file content. It’s been reliable across various Android devices and Google Drive versions in my projects.

hey there! i ran into this problem too. what worked for me was using react-native-blob-util. it handles those weird google drive URIs pretty well. you don’t need the actual file path, just use the URI to read the file contents directly. saves a lot of headache tbh. give it a try and lemme know if it helps!

I’ve faced a similar challenge with Google Drive files in React Native. The tricky part is that Google Drive uses a content provider, so you can’t get a direct file path like with local files.

Instead of trying to get the file path, I used the URI directly to read the file contents. You can use the react-native-fs library for this. First, install it with npm or yarn.

Then, use the readFile method with the content URI:

import RNFS from 'react-native-fs';

// ... in your file picker callback
RNFS.readFile(result.uri, 'base64').then((content) => {
  // Now you have the file content as a base64 string
  // You can process it, upload it, or save it locally
}).catch((err) => {
  console.error('Error reading file:', err);
});

This approach lets you work with the file content without needing the actual file path. It’s been reliable for me across different Android versions and Google Drive setups.