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:
- Create an OAuth2 Client ID (Web application)
- Set Redirect URI (e.g.
http://localhost:8501for local) - 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 ofUploadedFileobjects (like Streamlit’s). - If
accept_multiple_files=False, returns a singleUploadedFileorNone.
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:
- User authenticates via Google OAuth2 (e.g. with streamlit-oauth)
- Store
access_tokeninst.session_state - Pass token to
google_picker() - 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 startinfrontend/for hot-reload - Develop Streamlit component as usual
📜 License
MIT
💡 Credits
Found a bug or have a feature request? Open an issue!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file streamlit_google_picker-0.2.0.tar.gz.
File metadata
- Download URL: streamlit_google_picker-0.2.0.tar.gz
- Upload date:
- Size: 136.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a50aaeb599e48541c2a6197e44caa8445d40d19df6c442a84210c6707840d23a
|
|
| MD5 |
6687e59fc6cc83822e3ddccdaa7ff3d4
|
|
| BLAKE2b-256 |
8e02ec96bf7c4b38812e9419530e4b477dbd8a6168e98f5116cf24c8b1f02402
|
File details
Details for the file streamlit_google_picker-0.2.0-py3-none-any.whl.
File metadata
- Download URL: streamlit_google_picker-0.2.0-py3-none-any.whl
- Upload date:
- Size: 135.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4caa406a12a51f920f4f35e2888ec45fbc6bbbdd249ed7de849b07bb6ec4de47
|
|
| MD5 |
1dce89f6e70a6e4463b0b29a7eb973a2
|
|
| BLAKE2b-256 |
feee41a18528ec591c9fedff8299bf82b94a0e9c6378d8bc221eadea5551f6d5
|