Spaces:
Running
on
Zero
Running
on
Zero
import os | |
import server | |
import folder_paths | |
web = server.web | |
async def play_audio(request): | |
query = request.rel_url.query | |
filename = query.get("filename", None) | |
if filename is None: | |
return web.Response(status=404) | |
if filename[0] == "/" or ".." in filename: | |
return web.Response(status=403) | |
filename, output_dir = folder_paths.annotated_filepath(filename) | |
if not output_dir: | |
file_type = query.get("type", "output") | |
output_dir = folder_paths.get_directory_by_type(file_type) | |
if output_dir is None: | |
return web.Response(status=400) | |
subfolder = query.get("subfolder", None) | |
if subfolder: | |
full_output_dir = os.path.join(output_dir, subfolder) | |
if os.path.commonpath((os.path.abspath(full_output_dir), output_dir)) != output_dir: | |
return web.Response(status=403) | |
output_dir = full_output_dir | |
filename = os.path.basename(filename) | |
file_path = os.path.join(output_dir, filename) | |
if not os.path.isfile(file_path): | |
return web.Response(status=404) | |
_, ext = os.path.splitext(filename) | |
ext = ext.lower() | |
content_types = { | |
".wav": "audio/wav", | |
".mp3": "audio/mpeg", | |
".flac": "audio/flac", | |
".aac": "audio/aac", | |
".wma": "audio/x-ms-wma", | |
} | |
content_type = content_types.get(ext, None) | |
if content_type is None: | |
return web.Response(status=400) | |
try: | |
with open(file_path, "rb") as file: | |
data = file.read() | |
except: | |
return web.Response(status=500) | |
return web.Response(body=data, content_type=content_type) | |