Python 如何在flask中上载多个文件?
我有一个flask应用程序,用于将用户输入作为图像,运行一个模型并将其保存在文件夹中,它最初会获取一个图像并运行该应用程序。但是,我希望我的应用程序拍摄多张图像,在这些图像上运行模型,然后将其保存到文件夹中。 我在这个问题上找到了所有答案:没有一个适合我的用例。 请帮我弄清楚我哪里做错了。 这是我的烧瓶档案Python 如何在flask中上载多个文件?,python,opencv,flask,Python,Opencv,Flask,我有一个flask应用程序,用于将用户输入作为图像,运行一个模型并将其保存在文件夹中,它最初会获取一个图像并运行该应用程序。但是,我希望我的应用程序拍摄多张图像,在这些图像上运行模型,然后将其保存到文件夹中。 我在这个问题上找到了所有答案:没有一个适合我的用例。 请帮我弄清楚我哪里做错了。 这是我的烧瓶档案 from flask import Flask, render_template, url_for, session, redirect, request from image_initia
from flask import Flask, render_template, url_for, session, redirect, request
from image_initial import Image_tensorflow
app = Flask(__name__)
app.config['SECRET_KEY'] = 'mykeyhere'
@app.route('/', methods =['GET', 'POST'])
def test():
if "file_urls" not in session:
session['file_urls'] = []
file_urls = session['file_urls']
if(request.method == 'POST'):
file_obj = request.form['username']
session['file_urls'] = file_obj
return redirect(url_for('results'))
return render_template("test.html")
@app.route('/results')
def results():
if "file_urls" not in session or session['file_urls'] == []:
print('session is not created')
return redirect(url_for('test'))
file_urls = session['file_urls']
Image_tensorflow(file_urls,file_urls)
session.pop('file_urls', None)
#print(request.form)
return render_template('results.html', file_urls=file_urls)
if __name__ == "__main__":
app.run(host='0.0.0.0')
还有我的html页面
<form action = "" method = "POST">
<p>Upload your file here.</p>
<p>
<input type='file' name='username' multiple='multiple' class="btn btn-primary"/>
</p>
<p>
<input type='submit' value='Upload' class="btn btn-secondary"/>
</p>
您没有获得文件列表,这就是您没有获得多个文件的原因。您需要从用户名输入的表单中访问文件列表
from flask import Flask, render_template, url_for, session, redirect, request
from image_initial import Image_tensorflow
app = Flask(__name__, template_folder='templates')
app.config['SECRET_KEY'] = 'mykeyhere'
@app.route('/', methods=['GET', 'POST'])
def test():
if "file_urls" not in session:
session['file_urls'] = []
file_urls = session['file_urls']
if request.method == 'POST':
file_obj = request.form.getlist("username")
session['file_urls'] = file_obj
return redirect(url_for('results'))
return render_template("test.html")
@app.route('/results')
def results():
if "file_urls" not in session or session['file_urls'] == []:
print('session is not created')
return redirect(url_for('test'))
file_urls = session['file_urls']
Image_tensorflow(file_urls, file_urls)
session.pop('file_urls', None)
return render_template('results.html', file_urls=file_urls)
if __name__ == "__main__":
app.run(host='0.0.0.0')
上面的代码将为您提供文件列表。然而,我还没有对它进行完整的测试,所以如果其他一些东西不起作用,您可能需要做一些小的修改
编辑:
在堆栈跟踪中,问题似乎与行有关
Image.open(xa)
这里xa是一个图像列表,而Image.open()
不需要一个列表。您可以做的是遍历每个图像并打开它
for img in xa:
Image.open(img)
您是否尝试过使用
request.files.getlist(“用户名”)
来访问它,就像在您链接的解决方案中一样?另外,请准确指出什么不起作用。@metatoaster我尝试过,但它只显示文件夹中选定图像中的第一个图像,我希望保存所有选定图像。我也尝试过这种方法,但它导致了错误。其中一个是类型错误:只能连接str(而不是“列表”)对于我删除的str..最新错误是..AttributeError:'list'对象没有属性'read',请检查我的更新问题,我添加了image_initial.py文件。请发布堆栈跟踪,以便我们准确知道错误来自何处。我的答案中的上述代码足以让您获得文件列表。如果存在其他错误,则其他人将需要堆栈跟踪,以查看出现的错误添加了堆栈跟踪Image.open(xa)正在抛出错误,因为xa是一个列表。这里的xa是什么,图像列表?然后遍历图像并将它们逐个传递给Image.open()我已经编辑了我的答案
from flask import Flask, render_template, url_for, session, redirect, request
from image_initial import Image_tensorflow
app = Flask(__name__, template_folder='templates')
app.config['SECRET_KEY'] = 'mykeyhere'
@app.route('/', methods=['GET', 'POST'])
def test():
if "file_urls" not in session:
session['file_urls'] = []
file_urls = session['file_urls']
if request.method == 'POST':
file_obj = request.form.getlist("username")
session['file_urls'] = file_obj
return redirect(url_for('results'))
return render_template("test.html")
@app.route('/results')
def results():
if "file_urls" not in session or session['file_urls'] == []:
print('session is not created')
return redirect(url_for('test'))
file_urls = session['file_urls']
Image_tensorflow(file_urls, file_urls)
session.pop('file_urls', None)
return render_template('results.html', file_urls=file_urls)
if __name__ == "__main__":
app.run(host='0.0.0.0')
for img in xa:
Image.open(img)