import gradio as gr import zipfile import os from typing import List def create_zip(files: List[str], zip_name: str) -> str: if not zip_name.endswith('.zip'): zip_name += '.zip' with zipfile.ZipFile(zip_name, 'w') as zipf: for file in files: zipf.write(file, os.path.basename(file)) return zip_name def zip_files(files: List[str], zip_name: str): if not files: return "No files uploaded!" zip_path = create_zip(files, zip_name) return f"Zip file created: {zip_path}" def process_files(files: List[str], zip_name: str): file_paths = [file.name for file in files] return zip_files(file_paths, zip_name) with gr.Blocks() as demo: gr.Markdown("## ZipMaker: Upload files and create a zip archive") with gr.Row(): file_gallery = gr.Gallery(label="Upload Files", type="file") zip_name_input = gr.Textbox(label="Enter Zip File Name", placeholder="example.zip") with gr.Row(): submit_button = gr.Button("Create Zip") output = gr.Textbox(label="Output", interactive=False) submit_button.click( process_files, inputs=[file_gallery, zip_name_input], outputs=output ) demo.launch()