feat: Add model upload functionality (#194)
This commit is contained in:
79
py/upload.py
Normal file
79
py/upload.py
Normal file
@@ -0,0 +1,79 @@
|
||||
import os
|
||||
import time
|
||||
|
||||
import folder_paths
|
||||
|
||||
from aiohttp import web
|
||||
|
||||
from . import utils
|
||||
|
||||
|
||||
class ModelUploader:
|
||||
def add_routes(self, routes):
|
||||
|
||||
@routes.get("/model-manager/supported-extensions")
|
||||
async def fetch_model_exts(request):
|
||||
"""
|
||||
Get model exts
|
||||
"""
|
||||
try:
|
||||
supported_extensions = list(folder_paths.supported_pt_extensions)
|
||||
return web.json_response({"success": True, "data": supported_extensions})
|
||||
except Exception as e:
|
||||
error_msg = f"Get model supported extension failed: {str(e)}"
|
||||
utils.print_error(error_msg)
|
||||
return web.json_response({"success": False, "error": error_msg})
|
||||
|
||||
@routes.post("/model-manager/upload")
|
||||
async def upload_model(request):
|
||||
"""
|
||||
Upload model
|
||||
"""
|
||||
try:
|
||||
reader = await request.multipart()
|
||||
await self.upload_model(reader)
|
||||
utils.print_info(f"Upload model success")
|
||||
return web.json_response({"success": True, "data": None})
|
||||
except Exception as e:
|
||||
error_msg = f"Upload model failed: {str(e)}"
|
||||
utils.print_error(error_msg)
|
||||
return web.json_response({"success": False, "error": error_msg})
|
||||
|
||||
async def upload_model(self, reader):
|
||||
uploaded_size = 0
|
||||
last_update_time = time.time()
|
||||
interval = 1.0
|
||||
|
||||
while True:
|
||||
part = await reader.next()
|
||||
if part is None:
|
||||
break
|
||||
|
||||
name = part.name
|
||||
if name == "folder":
|
||||
file_folder = await part.text()
|
||||
|
||||
if name == "file":
|
||||
filename = part.filename
|
||||
filepath = f"{file_folder}/{filename}"
|
||||
tmp_filepath = f"{file_folder}/{filename}.tmp"
|
||||
|
||||
with open(tmp_filepath, "wb") as f:
|
||||
while True:
|
||||
chunk = await part.read_chunk()
|
||||
if not chunk:
|
||||
break
|
||||
f.write(chunk)
|
||||
uploaded_size += len(chunk)
|
||||
|
||||
if time.time() - last_update_time >= interval:
|
||||
update_upload_progress = {
|
||||
"uploaded_size": uploaded_size,
|
||||
}
|
||||
await utils.send_json("update_upload_progress", update_upload_progress)
|
||||
|
||||
update_upload_progress = {
|
||||
"uploaded_size": uploaded_size,
|
||||
}
|
||||
await utils.send_json("update_upload_progress", update_upload_progress)
|
||||
os.rename(tmp_filepath, filepath)
|
||||
Reference in New Issue
Block a user