Python Flask在服务器上重命名图像,变量不会增加

时间:2017-06-27 12:05:25

标签: python flask

我使用以下代码来请求图像:

@app.route("/user/zimmer-einstellen/upload", methods=['GET', 'POST'])
@login_required
@check_confirmed
def for_image_upload():
    if request.method == "POST":
        MYDIR = os.path.dirname(__file__)
        i = 1
        for key, file in request.files.iteritems():
            if file:
                filename = secure_filename(str(current_user.id) + "-bild-"+str(i)+".jpg")
                print filename              
                file.save(os.path.join(MYDIR + "/" + app.config['UPLOAD_FOLDER'], filename)) 
                i = i + 1 
        return "images"
    return redirect(url_for('index'))  

我想重命名我请求的所有图片,并在最后添加一个计数器,即i。因此,如果我得到3张图像,它们应该像这样命名:

1-bild-1.jpg
1-bild-2.jpg
1-bild-3.jpg

问题是i不会在此处递增并覆盖所有文件,因此最后只保存一个文件(最后一个)。我在一个单独的新python文件中尝试了代码并且它有效,所以它必须与请求有关吗?

如果我不重命名文件并保留原始名称,一切正常,因此可以正确请求多个文件并将其保存到所需位置。

1 个答案:

答案 0 :(得分:0)

正如@Jan暗示的那样,每次都有一个新请求,因此i = 0始终以i = 0开头。为了解决这个问题,我只需查看文件夹并循环,直到名称免费:

for key, file in request.files.iteritems():
   if file:
       filename = secure_filename(str(current_user.id) + "-bild-1." + file.filename.split(".")[-1])

       i = 1
       while os.path.exists(os.path.join(MYDIR + "/" + app.config['UPLOAD_FOLDER'], filename)):
           filename = filename.split(".")[0][:-1] + str(i) + "." + filename.split(".")[1]  
                    i = i + 1

       file.save(os.path.join(MYDIR + "/" + app.config['UPLOAD_FOLDER'], filename))