from flask import Flask, request, jsonify, send_from_directory import base64 import os import string import random from datetime import datetime app = Flask(__name__) @app.route('/') def index(): return send_from_directory(".", "index.html") @app.route('/upload_audio', methods=['POST']) def upload_audio(): try: data = request.get_json() if not data: return jsonify({"error": "JSONが送信されていません"}), 400 audio_data = data.get('audio_data') if not audio_data: return jsonify({"error": "音声データが送信されていません"}), 400 # Base64デコード try: audio_binary = base64.b64decode(audio_data) except Exception as decode_err: return jsonify({"error": "Base64デコードに失敗しました", "details": str(decode_err)}), 400 # 書き込み用ディレクトリとして /tmp/data を使用(/tmp は書き込み可能) persist_dir = "/tmp/data" os.makedirs(persist_dir, exist_ok=True) filepath = os.path.join(persist_dir, generate_filename(6)) #ここだけ変更しましたごめんなさい with open(filepath, 'wb') as f: f.write(audio_binary) return jsonify({"message": "音声が正常に保存されました", "filepath": filepath}), 200 except Exception as e: app.logger.error("エラー: %s", str(e)) return jsonify({"error": "サーバー内部エラー", "details": str(e)}), 500 def generate_random_string(length): letters = string.ascii_letters + string.digits return ''.join(random.choice(letters) for i in range(length)) def generate_filename(random_length): random_string = generate_random_string(random_length) current_time = datetime.now().strftime("%Y%m%d%H%M%S") filename = f"{current_time}_{random_string}.wav" return filename if __name__ == '__main__': port = int(os.environ.get("PORT", 7860)) app.run(debug=True, host="0.0.0.0", port=port)