You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Flask应用至Azure时遭遇文件上传内部服务器错误求助

问题描述

通过GitHub将Flask Web应用部署至Azure平台后,遇到文件处理异常:前端可正常打开并上传.xlsm文件,但点击提交后出现「Internal Server Error」。本地127.0.0.1:5000运行完全正常,云端部署后Flask接口无法读取、处理上传的文件,推测可能是文件保存路径的访问权限问题,尝试用tempfile.mktemp()临时存储也未解决。

附上核心代码:

from flask import Flask
app = Flask(__name__)
@app.route('/process', methods=['POST'])  
def process():  
    if 'file_policy' not in request.files:  
        ("No file part")  
        return render_template('output.html',filename='File not found')  
    else:
        file = request.files['file_policy']  
        app.config['UPLOAD_FOLDER']='.'  
        filename = secure_filename(file.filename)  
        path=os.path.join(app.config['UPLOAD_FOLDER'], filename)  
        file.save(path)  
        output=(pd.read_excel('path', sheet_name='Input')) #to check if the file is correctly saved  
        print(path)  
        print(output)  
        result=subprocess.run(['python', 'Motor_Tool_2.py', os.path.join(app.config['UPLOAD_FOLDER'], filename), path], capture_output=True, text=True, cwd=os.getcwd())  
        return render_template('output.html', filename='path')
解决思路
  • 修复代码低级错误

    • 代码多处用字符串'path'替代变量path:pd.read_excel('path')和render_template('output.html', filename='path')需改为变量path,否则会尝试读取名为"path"的不存在文件。
    • 补充缺失的导入模块:代码用到request、secure_filename、os、pd(pandas)、subprocess、render_template,需在开头添加:
      from flask import Flask, request, render_template
      from werkzeug.utils import secure_filename
      import os
      import pandas as pd
      import subprocess
      
  • 适配Azure文件系统权限与路径

    • Azure App Service的当前工作目录(.)可能无写入权限,建议改用系统临时目录:
      app.config['UPLOAD_FOLDER'] = os.environ.get('TEMP', '.')
      
    • 生成唯一文件名避免覆盖:
      from datetime import datetime
      filename = f"{datetime.now().strftime('%Y%m%d%H%M%S')}_{secure_filename(file.filename)}"
      
  • 排查subprocess调用问题

    • Azure环境中python可能指向Python2,建议用当前解释器路径:
      import sys
      result=subprocess.run([sys.executable, 'Motor_Tool_2.py', path, path], capture_output=True, text=True, cwd=os.getcwd())
      
    • 检查Motor_Tool_2.py是否在当前工作目录,或提供完整路径;打印result.stderr捕获脚本执行错误。
  • 开启日志定位具体错误

    • 在代码中添加异常捕获并记录日志:
      @app.route('/process', methods=['POST'])  
      def process():  
          try:
              # 原代码逻辑
          except Exception as e:
              app.logger.error(f"处理文件出错: {str(e)}")
              return render_template('output.html', filename=f"错误: {str(e)}")
      
    • 查看Azure App Service的日志流(Log Stream),获取「Internal Server Error」的具体触发原因。

内容的提问来源于stack exchange,提问作者naz panjwani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:25:20