所以我试图在Flask中测试一些用户上传的文件。对于图像,我只是简单地用缩短的UUID重命名它们并将它们放在一个文件夹中,但是对于其他文件类型我想保留原始文件名,所以我设计了将每个文件保存在一个以UUID命名的子文件夹中的复杂方法。一切正常,图像和文件都上传,并且都在他们应该进入的目录中。只是为了测试我为下载页面制作了一个模板,只显示文件名(计划稍后实现下载按钮)。但是,当我为上传的文件插入生成的URL时,我得到一个404,并且url应该被绑定的函数甚至看起来都没有执行(我让它在控制台中打印文件名,它甚至没有打印),并在控制台中显示URL:“GET / xVgePgj2Y HTTP / 1.1”404 - 我上传文件和制作网址的代码:
else:
new_folder_name = shortuuid.uuid()[:9]
os.mkdir(os.path.join(app.config['FILE_FOLDER'], new_folder_name))
file.save(os.path.join(os.path.join(app.config['FILE_FOLDER'], new_folder_name), filename))
new_folder_path = os.path.join(app.config['FILE_FOLDER'], new_folder_name)
return url_for('uploaded_file', new_folder_name=new_folder_name)
我提供文件的代码:
@app.route('/<new_folder_name>', methods=['GET'])
def uploaded_file(new_folder_name):
filename = subfolder_fetch(new_folder_name)
return render_template("download.html", filename=filename)
最后我的代码从子目录中获取文件名(在服务函数中调用 - 没有将文件名传递给url_for函数,因为这会使它变得丑陋和复杂):
def subfolder_fetch(new_folder_name):
stuff = os.listdir(os.path.join(app.config['FILE_FOLDER'], new_folder_name))
for name in folder:
print (name)
return name
我很困惑甚至发生了什么以及为什么我的uploaded_file函数甚至没有被调用。 提前致谢。