Web2py:如何显示存储在数据库中的已上传图像?

11

有没有一种web2py的方式可以从数据库表中显示图像?

例如:

模型:

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

控制器:

def somefunction(): to get the image.

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

视图:

<img src="{{somefunction}}" />
2个回答

17

目前的模型不会将图像存储在数据库中--相反,它会将图像存储在文件系统中,并将其新文件名存储在数据库中(在“picture”字段中)。如果您想要将图像本身存储在数据库中,请使用以下内容:

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' 字段中的值。

更多详细信息,请参见此处此处

如果需要进一步帮助,请尝试在邮件列表上提问。


你好Anthony,我怎样才能将“blob”保存在键/值Nosql存储中?我不需要详细的信息,只是想知道实现方式。谢谢你! - Locke
1
如果我想使用DAL,我相信唯一支持的键值存储是Google App Engine数据存储,并且在这种情况下,DAL将自动将文件存储在数据存储器中(您甚至不必显式创建单独的blob字段或指定uploadfield参数)。 DAL还对MongoDB和CouchDB提供部分支持,尽管它们是文档数据库,并且我不确定DAL是否支持在其中存储文件。 - Anthony
db.define_table('images',不应该有等号符号。代码中存在等号符号会导致代码无法工作。 - Tim 333
从不同控制器的视图中,我必须指定下载函数在默认控制器中才能使其正常工作:即URL('default', 'download',args=picture_name) - Juddling
@Anthony,你是核心Web2py开发者吗? - Pacerier

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)

在默认/ somefunction.html 视图中:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接