为什么我不能先从函数返回图像而不将其保存到文件中?

时间:2016-03-31 04:16:44

标签: python image return web2py

我是Python和web2py的新手,目前我遇到了一个奇怪的问题。 我有我的数据库(SQL Server)中存储的图像(图片),我试图在我的网站上显示。我已设法访问数据库并将信息带到网页,但我的图片有问题。

最后经过长时间的尝试,我能够确定我的问题,如下面的“下载”功能代码所示。如果我尝试从数据库中读取图像并将其返回,则Web浏览器会卡住并且不显示任何内容。如果我将图像保存到临时静态文件,然后读取它然后返回结果,一切正常。

我唯一的猜测是它与变量的范围有关,但我不确定。这是我的代码:

def download():

    cursor = erpDbCnxn.cursor()
    cursor.execute("SELECT Picture FROM KMS_Parts WHERE PartNo = '%s'" % request.args(0))
    row = cursor.fetchone()

    if row:
        dbpic = row.Picture

        f = open ("C:/Users/Udi/Desktop/tmp.jpg", "wb")  ##This is just for the test
        f.write(dbpic)                                   ##This is just for the test
        f.close()                                        ##This is just for the test

        f = open ("C:/Users/Udi/Desktop/tmp.jpg", "rb")  ##This is just for the test
        filepic = f.read()                               ##This is just for the test
        f.close()                                        ##This is just for the test

        return filepic                                   ##Returning dbpic doesn't work
    else:
        return 

2 个答案:

答案 0 :(得分:0)

在web2py中,您不能简单地返回文件对象,而必须使用response.stream

    import cStringIO
    file = cStringIO.StringIO(row.Picture)
    return response.stream(file)

您可能还会考虑使用web2py DAL并利用其内置功能来存储和检索文件(请参阅herehere)。

答案 1 :(得分:0)

只要是想知道最终结果的人: 看起来这是在以下版本的web2py中解决的。 目前,我只是在做“ return dbpic”,它工作正常。