【问题标题】:Web2py: How should I display an uploaded image that is stored in a database?Web2py:我应该如何显示存储在数据库中的上传图像?
【发布时间】:2011-09-14 03:07:24
【问题描述】:

有没有 web2py 方式显示数据库表中的图像?

例子:

型号:

db.define_table=('images',Field('picture', 'upload' ))

控制器:

def somefunction(): to get the image.

我应该如何从数据库中“读取”一张图片?

观点:

<img src="{{somefunction}}" />

【问题讨论】:

    标签: database image upload web2py


    【解决方案1】:

    照原样,您的模型不会将图像存储在数据库中,而是将图像存储在文件系统中,并将其新文件名存储在数据库中(在“图片”字段中)。如果要将图像本身存储在数据库中,请使用以下命令:

    db.define_table('images',
        Field('picture', 'upload', uploadfield='picture_file')
        Field('picture_file', 'blob'))
    

    无论您将图像存储在文件系统还是数据库中,您都可以使用相同的方法来检索它们。 'welcome' 脚手架应用程序在 default.py 控制器中包含以下 download() 操作:

    def download():
        return response.download(request, db)
    

    要检索图像,只需执行以下操作:

    <img src="{{=URL('default', 'download', args=picture_name)}}" />
    

    其中picture_name 是存储在“images”表的“picture”字段中的值,用于您要检索的特定图像。

    更多详情,请参阅herehere

    如果您需要进一步的帮助,请尝试在mailing list 上提问。

    【讨论】:

    • 嗨 Anthony,我如何将“blob”保存在 Key/Value Nosql 存储中?我不问细节,只是一种方法。提前致谢!
    • 如果我想使用 DAL,我相信唯一支持的键/值存储是 Google App Engine 数据存储,在这种情况下,DAL 会自动将文件存储在数据存储中(你可以甚至不必显式创建单独的 blob 字段或指定 uploadfield 参数)。 DAL 还部分支持 MongoDB 和 CouchDB,尽管它们是文档数据库,我不确定 DAL 是否支持在其中存储文件。
    • db.define_table=('images', 不应该有 = 符号。代码不能在那里使用它
    • 从不同控制器的视图中,我必须指定下载功能在默认控制器中才能使其工作:即URL('default','download', args=picture_name)
    • @Anthony,你是 web2py 核心开发者吗?
    【解决方案2】:

    或者,如果你使用 web2py 的默认上传图片作为文件的方式,你可以使用:

    在模型中:

    db.define_table('images',Field('picture','upload'))
    

    在控制器中:

    def somefunction():
        pic = db(db.images).select().first().picture   #select first picture
        return dict(pic=pic)
    

    并且在 default/somefunction.html 视图中:

    {{extend 'layout.html'}}
    <img  src="{{=URL( 'download', args=pic)}}" />
    

    我知道这是在最初的问题之后的一段时间,但我认为它可能有用,因为我花了一段时间才弄清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      相关资源
      最近更新 更多