Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在flask中上载多个文件?_Python_Opencv_Flask - Fatal编程技术网

Python 如何在flask中上载多个文件?

Python 如何在flask中上载多个文件?,python,opencv,flask,Python,Opencv,Flask,我有一个flask应用程序,用于将用户输入作为图像,运行一个模型并将其保存在文件夹中,它最初会获取一个图像并运行该应用程序。但是,我希望我的应用程序拍摄多张图像,在这些图像上运行模型,然后将其保存到文件夹中。 我在这个问题上找到了所有答案:没有一个适合我的用例。 请帮我弄清楚我哪里做错了。 这是我的烧瓶档案 from flask import Flask, render_template, url_for, session, redirect, request from image_initia

我有一个flask应用程序,用于将用户输入作为图像,运行一个模型并将其保存在文件夹中,它最初会获取一个图像并运行该应用程序。但是,我希望我的应用程序拍摄多张图像,在这些图像上运行模型,然后将其保存到文件夹中。 我在这个问题上找到了所有答案:没有一个适合我的用例。 请帮我弄清楚我哪里做错了。 这是我的烧瓶档案

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)