【问题标题】:Web2py upload filename different in Static to databaseWeb2py将静态文件名不同的文件上传到数据库
【发布时间】:2016-08-05 11:17:19
【问题描述】:

我有一个带有字段的 SQLFORM.factory 表单: Field('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

但在 static/images/students/ 中它被存储为: student.photo.a8c742a692b9f60c.706f7274726169742e706e67.png

这意味着当我尝试使用存储在数据库中的名称在另一个视图中加载图像时,找不到图像。

谁能帮我将数据库名称存储为与静态文件名相同的名称,以便我可以加载刚刚上传的图像?

谢谢大家。

【问题讨论】:

    标签: mysql upload filenames web2py


    【解决方案1】:

    您可能会将文件存储两次——一次通过调用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)
    

    【讨论】:

    • 已经解决了,再次感谢@Anthony。我确实需要使用 SQLFORM.factory,因为我有几个下拉列表,我需要所选项目的值而不是其内容,如果你明白我的意思的话。
    猜你喜欢
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2017-02-05
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多