Код длинный, но я попытаюсь сократить его здесь.
Это мое приложение-фляжка:
Код: Выделить всё
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/
')
def send_static(path):
return send_from_directory('static', path)
Это мой 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`, {Сначала я подумал это была проблема с Vercel, так как программа отлично работает локально, поэтому я пробовал Python где угодно, но столкнулся с той же проблемой. Я пытался выяснить, где возникает эта проблема, но консоль просто говорит «Внутренняя ошибка сервера» и не дает мне никаких указаний.
Как я могу это решить?
TIA
Подробнее здесь: https://stackoverflow.com/questions/785 ... sk-web-app