Clone04 commited on
Commit
78e936b
·
verified ·
1 Parent(s): 45aa957

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -2
app.py CHANGED
@@ -1,10 +1,12 @@
1
  from fastapi import FastAPI, File, UploadFile, Request, HTTPException
2
- from fastapi.responses import JSONResponse
3
  from pydantic import BaseModel
4
  import httpx
5
  import os
6
  from sse_starlette.sse import EventSourceResponse
7
  import asyncio
 
 
8
 
9
  app = FastAPI(title="Virtual Try-On API", description="API to forward images and handle virtual try-on requests")
10
 
@@ -118,4 +120,30 @@ async def event_generator(session_hash: str):
118
  @app.get("/sse")
119
  async def sse_proxy(session_hash: str, request: Request):
120
  """Proxy Server-Sent Events for the virtual try-on process."""
121
- return EventSourceResponse(event_generator(session_hash))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from fastapi import FastAPI, File, UploadFile, Request, HTTPException
2
+ from fastapi.responses import JSONResponse, StreamingResponse
3
  from pydantic import BaseModel
4
  import httpx
5
  import os
6
  from sse_starlette.sse import EventSourceResponse
7
  import asyncio
8
+ import urllib.request
9
+ import io
10
 
11
  app = FastAPI(title="Virtual Try-On API", description="API to forward images and handle virtual try-on requests")
12
 
 
120
  @app.get("/sse")
121
  async def sse_proxy(session_hash: str, request: Request):
122
  """Proxy Server-Sent Events for the virtual try-on process."""
123
+ return EventSourceResponse(event_generator(session_hash))
124
+
125
+ @app.get("/download-image")
126
+ async def download_image(path: str):
127
+ """Download and stream an image from the external API."""
128
+ try:
129
+ async with httpx.AsyncClient() as client:
130
+ response = await client.get("https://kwai-kolors-kolors-virtual-try-on.hf.space/file="+path)
131
+ response.raise_for_status()
132
+
133
+ # Create a BytesIO object for streaming
134
+ image_stream = io.BytesIO(response.content)
135
+
136
+ # Return StreamingResponse with appropriate media type
137
+ return StreamingResponse(
138
+ image_stream,
139
+ media_type="image/webp",
140
+ headers={
141
+ "Content-Disposition": "inline; filename=image.webp"
142
+ }
143
+ )
144
+ except httpx.HTTPStatusError as e:
145
+ raise HTTPException(status_code=e.response.status_code, detail=str(e.response.text))
146
+ except httpx.HTTPError as e:
147
+ raise HTTPException(status_code=500, detail=f"HTTP error occurred: {str(e)}")
148
+ except Exception as e:
149
+ raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(e)}")