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)
1 Like

Excuse me, have you solved it? As a newbie, I desperately want a solution.

You can drag and drop the folder from your file manager into the file uploader.

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.