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

✨ 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
CLIENT_ID = os.environ.get("GOOGLE_CLIENT_ID")
API_KEY = os.environ["GOOGLE_API_KEY"]
APP_ID = CLIENT_ID.split("-")[0]

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.5.tar.gz (136.6 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.5-py3-none-any.whl (136.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: streamlit_google_picker-0.2.5.tar.gz
  • Upload date:
  • Size: 136.6 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.5.tar.gz
Algorithm Hash digest
SHA256 150e4eb41fd81b186a926807a358dd28140a49d22bff925f973347a4fce864fa
MD5 37ae06737f5c5497ffcadf78f43008b1
BLAKE2b-256 ea0c9d05be1f9c9f63f9cc2669bf3ca046993e5ed5e16836baaffc564234cd97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for streamlit_google_picker-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 fe36d3f2272ec892ea946762f2a2561e2bb15ca6d80b149c76f053a538b78e7a
MD5 0de116c9e3370e5cfe42ca41d761d4b4
BLAKE2b-256 7febde8d70ac4347ff3762d5c64252cc58e3d367d0ffab263e00970eb8c5b99b

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