我使用以下代码来请求图像:
@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文件中尝试了代码并且它有效,所以它必须与请求有关吗?
如果我不重命名文件并保留原始名称,一切正常,因此可以正确请求多个文件并将其保存到所需位置。
答案 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))