#python #html #azure #flask
Вопрос:
Он там, я уже 2 дня пытаюсь найти решение своей проблемы, но до сих пор ничего не нашел. Может быть, просто не хватает этого. Мое веб-приложение flask запущено в Microsoft azure. Ошибка очень простая, дискреционная, не найдена, но я не знаю, как найти правильный путь.
Я получаю следующую ошибку:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 2069, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 2054, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 2051, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1501, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1499, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.8/dist-packages/flask/app.py", line 1485, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/home/ivar/PycharmProjects/Course8.1/app.py", line 78, in genpanel
f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
File "/usr/local/lib/python3.8/dist-packages/werkzeug/datastructures.py", line 3013, in save
dst = open(dst, "wb")
FileNotFoundError: [Errno 2] No such file or directory: '/uploads/GenPanelOverzicht_DG-3.1.0_HAN.xlsx'
У меня есть следующий код колбы:
import os
from flask import Flask, render_template, request
from werkzeug.utils import secure_filename
UPLOAD_FOLDER = '/uploads'
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
FLASK_DEBUG=1
@app.route('/')
def home():
""" home page """
return render_template("basis.html")
@app.route('/genpanel', methods=['GET', 'POST'])
def genpanel():
""" genpanel upload page """
print(os.getcwd())
try:
if request.method == 'POST':
f = request.files['file']
filename = secure_filename(f.filename)
f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
md5sum, dictionary = Genpanelanalyser.fileopener(
'/uploads/' f.filename)
md5sumold = Genpanelanalyser.getmd5sum()
if md5sum != md5sumold:
Genpanelanalyser.database(md5sum, dictionary)
message = "File upload was successfull"
os.remove('/uploads/' f.filename)
return render_template("genpanel.html", message=message)
else:
message = "Data allready exists"
os.remove('/uploads/' f.filename)
return render_template("genpanel.html", message=message)
else:
message = "Upload a file"
return render_template("genpanel.html", message=message)
except FileExistsError or FileNotFoundError:
message = "File not found"
return render_template("genpanel.html", message=message)
if __name__ == '__main__':
app.run(debug=True)
Это мой html-код:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Danielle Dunnewold, Ivar van den Akker en Moshtach
Ismail" >
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Manual</title>
<link rel="stylesheet" href="static/Style.css">
</head>
<body>
<!-- horizontaal menu -->
<div class="scrollmenu">
<a href="/">HOME</a>
<a href="/results">APPLICATION</a>
<a href="/manual">MANUAL</a>
<a href="/download">DOWNLOAD RESULTS</a>
<a href="/genpanel">UPLOAD GENEPANEL</a>
</div>
<H2>Upload a new genepanel</H2>
<form action = '/genpanel' method = "POST" enctype = "multipart/form-data">
<input type = "file" name = "file" />
<input type = "submit" value = "Submit" />
</form>
<br>
<p>{{ message }}</p>
</body>
</html>
Если кто-то знает решение или страницу, где я могу найти решение или способ найти решение, не стесняйтесь комментировать и помогать мне. Если потребуется дополнительная информация, я могу ее предоставить.
Ответ №1:
папка загрузки определена как app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
, но похоже, что она существует, поэтому строка кода f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
выходит из строя. вы можете попробовать
- создайте папку «загрузки», и она будет на том же уровне, что и шаблоны.
- os.remove будет выглядеть так, как показано ниже(удалите первый /)
os.remove('uploads/' f.filename)
Ответ №2:
Я создал функцию, чтобы получить путь к папке загрузки и передать его своей функции, чтобы путь всегда был правильным. Я попытался создать папку, но на самом деле это не сработало. Вы где правы насчет /.
функция для получения пути:
import os
def getpath():
patht = os.getcwd()
path = patht "/uploads/"
return path
Новая функция в app.py:
UPLOAD_FOLDER = uploads.getpath.getpath()
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/')
def home():
""" home page """
return render_template("basis.html")
@app.route('/genpanel', methods=['GET', 'POST'])
def genpanel():
""" genpanel upload page """
try:
if request.method == 'POST':
f = request.files['file']
filename = secure_filename(f.filename)
f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
md5sum, dictionary = Genpanelanalyser.fileopener(
UPLOAD_FOLDER f.filename)
md5sumold = Genpanelanalyser.getmd5sum()
if md5sum != md5sumold:
Genpanelanalyser.database(md5sum, dictionary)
message = "File upload was successfull"
os.remove(UPLOAD_FOLDER f.filename)
return render_template("genpanel.html", message=message)
else:
message = "Data allready exists"
os.remove(UPLOAD_FOLDER f.filename)
return render_template("genpanel.html", message=message)
else:
message = "Upload a file"
return render_template("genpanel.html", message=message)
except FileExistsError or FileNotFoundError:
message = "File not found"
return render_template("genpanel.html", message=message)
if __name__ == '__main__':
app.run()