rar2zip2 / app.py
namelessai's picture
Create app.py
74c0b49 verified
raw
history blame
3.58 kB
import gradio as gr
import os
import zipfile
import tempfile
import shutil
from pathlib import Path
try:
import rarfile
except ImportError:
print("Installing rarfile...")
os.system("pip install rarfile")
import rarfile
def convert_rar_to_zip(rar_file):
"""
Convert a RAR file to ZIP format.
Args:
rar_file: Path to the uploaded RAR file
Returns:
Path to the created ZIP file or error message
"""
if rar_file is None:
return None, "Please upload a RAR file first."
try:
# Create a temporary directory for extraction
temp_dir = tempfile.mkdtemp()
# Get the base name without extension
base_name = Path(rar_file.name).stem
zip_path = os.path.join(temp_dir, f"{base_name}.zip")
# Extract RAR file
with rarfile.RarFile(rar_file.name, 'r') as rar_ref:
rar_ref.extractall(temp_dir)
# Create ZIP file
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zip_ref:
# Walk through extracted files and add them to ZIP
for root, dirs, files in os.walk(temp_dir):
for file in files:
if file.endswith('.zip'):
continue # Skip the ZIP file itself
file_path = os.path.join(root, file)
# Add file with relative path
arcname = os.path.relpath(file_path, temp_dir)
zip_ref.write(file_path, arcname)
file_size = os.path.getsize(zip_path) / (1024 * 1024) # Size in MB
success_msg = f"βœ… Conversion successful! ZIP file size: {file_size:.2f} MB"
return zip_path, success_msg
except rarfile.BadRarFile:
return None, "❌ Error: Invalid or corrupted RAR file."
except Exception as e:
return None, f"❌ Error during conversion: {str(e)}"
# Create Gradio interface
with gr.Blocks(title="RAR to ZIP Converter", theme=gr.themes.Soft()) as demo:
gr.Markdown(
"""
# πŸ“¦ RAR to ZIP Converter
Upload your RAR file and convert it to ZIP format instantly.
"""
)
with gr.Row():
with gr.Column():
rar_input = gr.File(
label="Upload RAR File",
file_types=[".rar"],
type="filepath"
)
convert_btn = gr.Button("Convert to ZIP", variant="primary", size="lg")
with gr.Column():
status_output = gr.Textbox(
label="Status",
placeholder="Upload a RAR file and click Convert...",
lines=2
)
zip_output = gr.File(
label="Download ZIP File",
interactive=False
)
gr.Markdown(
"""
### πŸ“ Instructions:
1. Click "Upload RAR File" and select your .rar file
2. Click "Convert to ZIP" button
3. Wait for the conversion to complete
4. Download your converted ZIP file
**Note:** This app requires `rarfile` and `unrar` to be installed.
On Linux/Mac, you may need to install unrar: `sudo apt-get install unrar` or `brew install unrar`
"""
)
# Connect the conversion function to the button
convert_btn.click(
fn=convert_rar_to_zip,
inputs=rar_input,
outputs=[zip_output, status_output]
)
# Launch the app
if __name__ == "__main__":
demo.launch(share=False)