import requests import os from flask import Flask, jsonify, request, send_from_directory app = Flask(__name__, static_folder='static') @app.route('/') def index(): return send_from_directory(app.static_folder, 'index.html') @app.route('/static/') def static_files(filename): return send_from_directory(app.static_folder, filename) @app.route('/change_cloth_base64', methods=['POST']) def change_cloth_base64(): data = request.get_json() print(f"change_cloth_base64 input data keys:{list(data.keys()) if data else None}") if not data: return jsonify({"ret": -1, "state": -1, "msg": "No JSON data provided"}), 400 human_img = data.get('human_img') cloth_img = data.get('cloth_img') if not human_img or not cloth_img: return jsonify({"ret": -1, "state": -1, "msg": "Both human_img and cloth_img are required"}), 400 kuzi_img = data.get('kuzi_img') change_desc = data.get('change_desc') if change_desc is None: change_desc = '' elif not isinstance(change_desc, str): return jsonify({"ret": -1, "state": -1, "msg": "change_desc must be a string"}), 400 try: if kuzi_img: payload = { 'model_image': human_img, 'shirt_image': cloth_img, 'pants_image': kuzi_img, 'change_desc': change_desc, } response = requests.post('http://127.0.0.1:12223/try-on', json=payload, timeout=360) else: payload = { 'model_image': human_img, 'shirt_image': cloth_img, 'change_desc': change_desc, } response = requests.post('http://127.0.0.1:12222/try-on', json=payload, timeout=360) response.raise_for_status() result = response.json() result_image = result.get('result_url') if not result_image: return jsonify({"ret": -1, "state": -1, "msg": "Backend returned no image"}), 500 except requests.exceptions.Timeout: return jsonify({"ret": -1, "state": -1, "msg": "Backend service timeout"}), 504 except requests.exceptions.ConnectionError: return jsonify({"ret": -1, "state": -1, "msg": "Cannot connect to backend service"}), 502 except requests.exceptions.HTTPError as e: return jsonify({"ret": -1, "state": -1, "msg": f"Backend error: {e}"}), 502 return jsonify({ "ret": 0, "state": 0, "msg": "success", "data": result_image, }) if __name__ == '__main__': app.run(host="0.0.0.0", port=28888, debug=True) # if __name__ == '__main__': # # 证书路径(替换为你的域名) # ssl_cert = '/etc/letsencrypt/live/change.xiangsilian.com/fullchain.pem' # ssl_key = '/etc/letsencrypt/live/change.xiangsilian.com/privkey.pem' # # 检查证书文件是否存在 # if not os.path.exists(ssl_cert) or not os.path.exists(ssl_key): # print("❌ 证书文件不存在,请检查路径是否正确!") # else: # # 启动HTTPS服务(443端口需要root权限,所以运行时要加sudo) # app.run( # host='0.0.0.0', # 允许外网访问 # port=443, # HTTPS默认端口(非443需加端口访问,如8443) # ssl_context=(ssl_cert, ssl_key), # 加载Let's Encrypt证书 # debug=True # 生产环境务必关闭debug # )