Skip to content

[Bug] MediaFileStorageError after logout/login cycle with st.file_uploader #294

@amcrabtree

Description

@amcrabtree

Streamlit Version

1.51.0

Streamlit Authenticator Version

0.4.2

Environment

macOS 15.6.1

What happened?

After a logout/login cycle, Streamlit throws MediaFileStorageError when pages contain st.file_uploader widgets:

Traceback (most recent call last): File "/opt/miniconda3/envs/yeast-env/lib/python3.11/site-packages/streamlit/runtime/memory_media_file_storage.py", line 140, in get_file return self._files_by_id[file_id] KeyError: '2e3f1d0f5ebf77bb11f48b27b629b28921a06edf3401d36e32e95a5f' streamlit.runtime.media_file_storage.MediaFileStorageError: Bad filename '2e3f1d0f5ebf77bb11f48b27b629b28921a06edf3401d36e32e95a5f.jpg'. (No media file with id '2e3f1d0f5ebf77bb11f48b27b629b28921a06edf3401d36e32e95a5f')

Root Cause:

Streamlit widget state persists file uploader media references across logout/login cycles. When the user logs back in after logging out, Streamlit tries to restore orphaned file IDs from the previous session that no longer exist in media storage.

Attempted Workarounds:

  1. Cache clearing on logout - Doesn't resolve the issue:
st.cache_data.clear()
st.cache_resource.clear()
  1. Clearing media storage on login - Causes SSL errors:
from streamlit.runtime.memory_media_file_storage import get_default_media_file_storage
get_default_media_file_storage().clear()
  1. Clearing widget state before login - Breaks login functionality:
for key in list(st.session_state.keys()):
    if 'FileUploader' in key:
        del st.session_state[key]
  1. Clearing widget state in logout callback - Doesn't resolve the issue:
def logout_callback():
    # Clear auth keys
    for k in ["roles", "username", "name", "email", "authentication_status", "authenticator"]:
        if k in st.session_state:
            del st.session_state[k]
    
    # Clear widget state
    keys_to_delete = [k for k in st.session_state.keys()
                      if k.startswith(('FormSubmitter', 'FileUploader', 'UploadedFile'))]
    for k in keys_to_delete:
        del st.session_state[k]
    
    st.rerun()

Current Impact: Cosmetic - spams terminal logs but doesn't affect functionality.

What did you expect to happen?

File uploader state should be cleared when user logs out, or media file references should be validated before restoration to prevent KeyError.

Steps to reproduce

  1. Set up streamlit-authenticator with login page
  2. Add st.file_uploader to any authenticated page
  3. Login → navigate to page with file uploader
  4. Logout → login again
  5. Error appears in terminal on the second login

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions