Skip to main content

Streamlit component for picking files from Google Drive

Project description

streamlit-google-picker

A Streamlit component to select files and folders from Google Drive using the official Google Picker.

This component lets you embed the Google Drive file picker directly in your Streamlit app, allowing your users to select files or folders from their Google Drive and work with them as Python file-like objects.


🚀 Features

  • Pick files or folders from Google Drive
  • Multi-select support (pick multiple files/folders at once)
  • Filter by file type or MIME type (e.g. PDF, images, etc.)
  • Folder navigation just like Drive (In progress)
  • Native Streamlit feel, like st.file_uploader

📸 Demo


🛠️ Installation

pip install streamlit-google-picker

For latest dev, use pip install git+https://github.com/LounesAl/streamlit-google-picker


⚙️ Requirements

You need a Google Cloud project with proper OAuth2 and API setup:

  1. Create an OAuth2 Client ID (Web application)
  2. Set Redirect URI (e.g. http://localhost:8501 for local)
  3. Enable both Google Drive API and Google Picker API

Set these in your environment:

GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_API_KEY=your-api-key
GOOGLE_PROJECT_NUMBER=your-project-number

✨ Usage

After the user is authenticated (OAuth2, see examples), use the picker:

import streamlit as st
from streamlit_google_picker import google_picker

token = st.session_state["token"]["access_token"]  # From your OAuth2 flow
API_KEY = os.environ["GOOGLE_API_KEY"]
APP_ID = os.environ["GOOGLE_PROJECT_NUMBER"]

uploaded_files = google_picker(
    label="Pick files from Google Drive",
    token=token,
    apiKey=API_KEY,
    appId=APP_ID,
    accept_multiple_files=True,
    type=["pdf", "png", "jpg"],   # file extensions or MIME types
    allow_folders=True,
    nav_hidden=False,
    key="google_picker",
)

if uploaded_files:
    for uploaded_file in uploaded_files:
        st.write(f"Filename: {uploaded_file.name}, Size: {uploaded_file.size_bytes}")
        # To get file content:
        data = uploaded_file.read()  # This downloads the file on-demand!
        # Display or process as needed
        st.write(f"Bytes: {len(data)}")

Folder selection: If the user selects a folder, all files inside (recursively) are returned as UploadedFile objects.

You can also use it with a single file (returns a single object or None):

uploaded_file = google_picker(accept_multiple_files=False, ...)
if uploaded_file:
    st.write(uploaded_file.name)
    content = uploaded_file.read()

📥 Return Format

  • If accept_multiple_files=True, returns a list of UploadedFile objects (like Streamlit’s).
  • If accept_multiple_files=False, returns a single UploadedFile or None.

Each UploadedFile behaves like a Python file object (subclass of io.BytesIO):

uploaded_file.name       # Original filename
uploaded_file.size_bytes # File size in bytes
uploaded_file.type       # MIME type
uploaded_file.url        # Direct Google Drive URL
uploaded_file.id         # File ID
uploaded_file.read()     # Reads bytes (downloads on demand)

🧩 Full OAuth2 + Picker Example

A typical flow:

  1. User authenticates via Google OAuth2 (e.g. with streamlit-oauth)
  2. Store access_token in st.session_state
  3. Pass token to google_picker()
  4. Get uploaded files as file-like objects

See example.py for a full sample.


🧑‍💻 Development

  • Clone this repo
  • Install backend (Python) and frontend (React) requirements
  • Run npm install && npm start in frontend/ for hot-reload
  • Develop Streamlit component as usual

📜 License

MIT


💡 Credits


Found a bug or have a feature request? Open an issue!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

streamlit_google_picker-0.2.1.tar.gz (136.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

streamlit_google_picker-0.2.1-py3-none-any.whl (135.6 kB view details)

Uploaded Python 3

File details

Details for the file streamlit_google_picker-0.2.1.tar.gz.

File metadata

  • Download URL: streamlit_google_picker-0.2.1.tar.gz
  • Upload date:
  • Size: 136.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for streamlit_google_picker-0.2.1.tar.gz
Algorithm Hash digest
SHA256 5aeb7fac4f44f4ed830c66644c8b092910d1991dab7f8b273b8ee074aebf1bca
MD5 cd57719b82fd6ddbf17db488f9d634bc
BLAKE2b-256 9589581d1f535ed309bc07685a04d95ea3d1b75ceb15e01dd45755ee8dfc718d

See more details on using hashes here.

File details

Details for the file streamlit_google_picker-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for streamlit_google_picker-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 362f024ae49b4a644e0c7776bceece6d985fbadc73868e803d77308bd803e3b6
MD5 3219c7f4238fa4184f6ca8385af69e3b
BLAKE2b-256 7873c77180d0cad6df0623a1c501f617a14d5e82b9513538929d8cd01d5927c7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page