| 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() |