Fetch-Content / app.py
KingNish's picture
Update app.py
5e5ef17 verified
raw
history blame
2 kB
import gradio as gr
import requests
import os
import re
import mimetypes
def download_file(url):
"""Downloads a file from a URL and returns the local file path."""
if not url.startswith("http://") and not url.startswith("https://"):
url = "http://" + url # Prepend "http://" if not present
try:
response = requests.get(url, stream=True)
response.raise_for_status() # Raise an exception for bad status codes
# Generate a safe and unique temporary filename
original_filename = os.path.basename(url)
# Remove invalid characters from filename
safe_filename = re.sub(r'[^\w\-_\. ]', '_', original_filename)
temp_filename = f"{safe_filename}"
# Infer file extension from content type
content_type = response.headers['content-type']
ext = mimetypes.guess_extension(content_type)
if ext and not temp_filename.endswith(ext): # Append extension if not already present
temp_filename += ext
with open(temp_filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192000):
f.write(chunk)
return temp_filename
except requests.exceptions.MissingSchema:
return "Error: Invalid URL format. Even after adding 'http://', the URL is still invalid."
except requests.exceptions.ConnectionError:
return "Error: Could not connect to the server. Please check your internet connection."
except requests.exceptions.RequestException as e:
return f"Error downloading file: {e}"
iface = gr.Interface(
fn=download_file,
inputs=gr.Textbox(lines=1, placeholder="Enter URL of the file"),
outputs=gr.File(),
title="File Downloader for Hugging Face Chat Tools",
description="Enter the URL of an image, video, document, etc. to download it. "
"This tool is designed for use with Hugging Face Chat Tools: "
"[https://hf.co/chat/tools/66f1a8159d41ad4398ebb711](https://hf.co/chat/tools/66f1a8159d41ad4398ebb711)",
concurrency_limit=None
)
iface.launch()