from typing import List
import os
import streamlit as st
from streamlit.runtime.uploaded_file_manager import UploadedFile
from zip import zip_files, generate_password
DARA_PATH = "data"
os.makedirs(DARA_PATH, exist_ok=True)
def upload_files(files: List[UploadedFile]):
for file in files:
with open(file.name, "wb") as f:
f.write(file.read())
import base64
def get_binary_file_downloader_html(file_path, text="Download Link"):
# ダウンロードリンクを作成する関数
with open(file_path, 'rb') as f:
data = f.read()
b64 = base64.b64encode(data).decode()
href = f'{text}'
return href
def main():
st.title("File Zipper")
# ファイルのアップロード
files = st.file_uploader("Upload Files", accept_multiple_files=True)
if files:
os.chdir(DARA_PATH)
upload_files(files)
# zipファイルを作成するためのフォームを表示する
form = st.form(key='zip_form')
zip_file_name = form.text_input("Zip file name",
value=f"{os.path.splitext(files[0].name)[0]}.zip")
password = form.text_input("passward", value="")
submit_button = form.form_submit_button("Create Zip File")
if submit_button:
# zipファイルを作成する
_password = generate_password() if password == "" else password
zip_files(src=[file.name for file in files],
dst=zip_file_name,
password=_password)
# ダウンロードリンクとパスワードの表示
st.markdown(get_binary_file_downloader_html(zip_file_name,
text=f"Download {zip_file_name}"),
unsafe_allow_html=True)
st.markdown(f"password: :orange[{_password}]")
os.chdir("../")
if __name__ == '__main__':
main()