我有一个带有字段的SQLFORM.factory表单: 字段('photo','upload',uploadfolder = os.path.join(request.folder,'static / images / students /')),
成功上传后,将文件名插入数据库并将图像文件保存在static / images / students /中 db.student.insert(...,photo = request.vars.photo,...)
但是当我查看数据库时,文件的名称存储为: student.photo.9d313a71112989fe.706f7274726169742e706e67.png
但是在静态/图像/学生/它存储为: student.photo.a8c742a692b9f60c.706f7274726169742e706e67.png
这意味着当我尝试在另一个视图中加载图像时,使用存储在数据库中的名称,无法找到图像。
任何人都可以帮我保存数据库名称与静态文件名相同,这样我就可以加载我刚刚上传的图像了吗?
谢谢大家。
答案 0 :(得分:0)
您可能会将文件存储两次 - 一次通过调用SQLFORM.factory
进入静态文件夹,一次通过调用db.student.insert
进入上传文件夹(默认上传位置)。每次,文件名都包含一个唯一的随机组件,数据库中存储的特定文件名是db.student.insert
调用生成的文件名,而不是SQLFORM.factory
生成的文件名。
更好的方法是使用SQLFORM(db.student)
生成表单而不是SQLFORM.factory
,除非您需要添加其他字段或组合多个数据库表中的字段。如果必须使用SQLFORM.factory
,则插入form.vars.photo
(其中包含由SQLFORM.factory
生成的文件名)而不是request.vars.photo
(其中包含实际的文件对象,并将触发新的文件创建):
db.student.insert(..., photo=form.vars.photo)