我正在尝试在托管平台上托管 Flask Web 应用程序。到目前为止,我已经尝试在 vercel 和 pythonanywhere 上托管,但似乎两者都遇到了同样的问题。该代码在本地运行良好,但在云端它给了我一个
Internal Server Error (500)
代码很长,但我会在这里尝试缩短它。 这是我的烧瓶应用程序:
from flask import Flask, request, jsonify, Response, send_from_directory, render_template
from flask_cors import CORS
import pandas as pd
import io, os, time
app = Flask(__name__, static_folder='static', template_folder='templates')
CORS(app)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/process', methods=['POST'])
def process_file():
try:
type_id = int(request.form.get('buttonID'))
uploaded_file = request.files['file']
input_filename = uploaded_file.filename
uploaded_file.save(input_filename)
output_filename = process_file(input_filename)
file_extension = os.path.splitext(output_filename)[1].lower()
if file_extension == '.csv':
mimetype = 'text/csv'
elif file_extension in ['.xls', '.xlsx']:
mimetype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
else:
return jsonify({"error": "Unsupported output file format"}), 400
with open(output_filename, 'rb') as f:
file_contents = f.read()
return Response(
file_contents,
mimetype=mimetype,
headers={"Content-Disposition": f"attachment;filename={output_filename}"}
)
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/static/<path:path>')
def send_static(path):
return send_from_directory('static', path)
定义了
process_file
函数,它只是在目录中创建处理后的电子表格文件并返回其名称
这是我的 script.js(缩短):
async function handleSubmit() {
if (!selectedButton) {
document.getElementById('process-warning').style.display = 'block';
return;
}
if (!fileForProcessing) {
console.error("No file selected.");
return;
}
const formData = new FormData();
formData.append('file', fileForProcessing);
formData.append('buttonID', selectedButton);
try {
const response = await fetch(`${window.location.origin}/process`, {
method: 'POST',
body: formData
});
if (response.status === 200) {
newFileData = await response.arrayBuffer();
recvdFile = true;
}
} catch (error) {
console.error(`Error: ${error}`);
} finally {
document.getElementById('spinner').style.display = 'none';
document.getElementById('processing-incomplete').style.display = 'none';
}
}
错误具体发生在这一行:
const response = await fetch(`${window.location.origin}/process`, {
当我按下提交按钮并调用
handleSubmit()
函数时,会发生这种情况
起初我以为这是 vercel 的问题,因为该程序在本地运行得很好,所以我在任何地方尝试了 python,但我遇到了同样的问题。我一直在尝试找出此问题发生的位置,但控制台只是显示“内部服务器错误”并且没有给我任何线索。
有什么办法可以解决这个问题吗? TIA
自己设法解决了问题,结果发现我失踪了
openpyxl
。
尽管做了 pip freeze
,但我的库没有添加到需求文件中的依赖项列表中。