Upload all contents in a folder

Summary

Is it possible to upload all files in a folder at once without having to individually select each file? I know multiple files can be uploaded at once but I am trying to find a way to click on the folder and instead of each file because I am trying to upload several and it is quite tedius to click on each one.

Steps to reproduce

Code snippet:

    if upload_images_button:
        s.pressed_first_button = False
        uploaded_file_raw = st.file_uploader("Choose a file", accept_multiple_files=True, type=["png","jpg","jpeg", "tif"])

If applicable, please provide the steps we should take to reproduce the error or specified behavior.

Desired behavior:

Upload multiple files by clicking on a folder.

Actual behavior:

Have to click on each image to upload.

Debug info

  • Streamlit version: (get it with $ streamlit version)
  • Python version: (get it with $ python --version)
  • Using Conda? PipEnv? PyEnv? Pex?
  • OS version:
  • Browser version:

Requirements file

Using Conda? PipEnv? PyEnv? Pex? Share the contents of your requirements file here.
Not sure what a requirements file is? Check out this doc and add a requirements file to your app.

Links

  • Link to your GitHub repo:
  • Link to your deployed app:

Additional information

If needed, add any other context about the problem here.

One easy solution is to use ctrl-a (Windows) or command-a (Mac) to select all of the items in the folder.

Great, thanks! Is there a way to do it with the code?

I would also like to know if this is posible, planning to do as a project a simple deep learning classification APP and this would be nice.

Hi @ Mackenzie_Robey

I don’t think we have a straightforward solution for this. However, we can use a workaround to enable bulk upload by incorporating predefined functions from Tkinter within the Streamlit web app.

The example below illustrates how to upload multiple PDF files by clicking on a folder. Similarly, we can change the source data format to .xlsx, .txt, etc

Code snippet:

import streamlit as st
import tkinter as tk
from tkinter import filedialog
import os
import pandas as pd

with st.sidebar:
    root = tk.Tk()
    root.withdraw()
    root.wm_attributes('-topmost', 1)
    st.write('Please select a folder:')
    clicked = st.button('Browse Folder')
    
if clicked:
    dirname = str(filedialog.askdirectory(master=root))
    pdf_reports = [file for file in os.listdir(dirname) if file.endswith('.pdf')]
    output = pd.DataFrame({"File Name": pdf_reports})
    st.table(output)