Found possible solution. It was a combination of one Streamlit answer and what I was doing in the first place in Python outside streamlit
Here it is, if anyone ever needs it:
# store my data in zip/json
with zipfile.ZipFile("file.zip", 'w') as zip:
zip.writestr("Data.json", jsonString)
# Parse made zip file to streamlit button
with open("file.zip", "rb") as fp:
btn = st.download_button(
label="Download ZIP",
data=fp,
file_name="file.zip",
mime="application/octet-stream"
)
This works great, but leaves “file.zip” saved on disk wherever the app is hosted - is there a way to have the whole process happen in-memory? It looks like st.download_button cannot directly save a ZipFile object
I’m creating small files ~15kb, but indeed - my app reaches over the limit every ~24h and it’s either this, or one other function which creates a lot of plots…Since I placed @cache(ttl…) on the plot function; I would assume that this is causing problems. I didn’t even realize that this leaves disk on the app hosting space
The trick is to create an in-memory buffer with io.BytesIO, write to it using zip.writestr , and use st.download_button() to download this in-memory buffer as a .zip file:
import streamlit as st
import json
import zipfile
import io
jsonString = {"name": "Test", "prop": [{"a": 1, "b": 2}]}
# Create an in-memory buffer to store the zip file
with io.BytesIO() as buffer:
# Write the zip file to the buffer
with zipfile.ZipFile(buffer, "w") as zip:
zip.writestr("Data.json", json.dumps(jsonString))
buffer.seek(0)
btn = st.download_button(
label="Download ZIP",
data=buffer, # Download buffer
file_name="file.zip"
)
Thanks for stopping by! We use cookies to help us understand how you interact with our website.
By clicking “Accept all”, you consent to our use of cookies. For more information, please see our privacy policy.
Cookie settings
Strictly necessary cookies
These cookies are necessary for the website to function and cannot be switched off. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms.
Performance cookies
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us understand how visitors move around the site and which pages are most frequently visited.
Functional cookies
These cookies are used to record your choices and settings, maintain your preferences over time and recognize you when you return to our website. These cookies help us to personalize our content for you and remember your preferences.
Targeting cookies
These cookies may be deployed to our site by our advertising partners to build a profile of your interest and provide you with content that is relevant to you, including showing you relevant ads on other websites.