UnboundLocalError:局部变量' filename'在分配之前引用

时间:2016-02-08 11:06:15

标签: python flask flask-sqlalchemy flask-wtforms

我试图获取文件名并显示列表,我遇到以下错误: UnboundLocalError:local variable' filename'在分配前引用

这是代码,我正在处理,似乎循环没有正确设置。

@media.route('/uploadajax', methods=['POST'])
def upldfile():
    if request.method == 'POST':
        files = request.files.getlist('file[]')
        for f in files:
            if f and allowed_file(f.filename):
                filename = secure_filename(f.filename)
                updir = os.path.join(basedir, 'upload/')
                f.save(os.path.join(updir, filename))
                file_size = os.path.getsize(os.path.join(updir, filename))
            else:
                app.logger.info('ext name error')
                return jsonify(error='ext name error')
        return jsonify(name=filename, size=file_size)

如何解决循环问题?

2 个答案:

答案 0 :(得分:3)

for循环之前添加以下行可以解决您的问题:

files = request.files.getlist('file[]')
if not files:
    return jsonify(error='Please add files')
for f in files:
    # for loop body

答案 1 :(得分:1)

正如在回答@Andriy Ivaneyko时所看到的,问题是你这里可能有一个空的文件列表。您可以创建一个包含验证结果的列表,以在前端启用详细的错误报告。

@media.route('/uploadajax', methods=['POST'])
def upldfile():
    if request.method == 'POST':
        files = request.files.getlist('file[]')
        my_json_stuff = []
        for f in files:
            if f and allowed_file(f.filename):
                filename = secure_filename(f.filename)
                updir = os.path.join(basedir, 'upload/')
                f.save(os.path.join(updir, filename))
                file_size = os.path.getsize(os.path.join(updir, filename))
                my_json_stuff.append({'name': filename, 'size': file_size})
            else:
                app.logger.info('ext name error')
                my_json_stuff.append({'error': 'ext name error'})

        return jsonify(my_json_stuff)