为什么我不能 return 函数中的图像而不先将其保存到文件中?
Why can't I return an image from a function without saving it into a file first?
我是 Python 和 web2py 的新手,目前正面临一个奇怪的问题。
我的数据库(SQL 服务器)中存储了图像(图片),我正试图在我的网站上显示这些图像。我已经设法访问数据库并将信息带到网页上,但是我在处理图片时遇到了问题。
经过长时间的尝试,我终于找到了我的问题所在,正如我的 "Download" 函数的以下代码所示。如果我尝试从数据库中读取图像并 return 它,网络浏览器就会卡住并且什么都不显示。如果我将图像保存到临时静态文件,然后读取它然后 return 结果,一切正常。
我唯一的猜测是它与变量的范围有关,但我不确定。这是我的代码:
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
在 web2py 中,您不能简单地 return 文件对象,而必须使用 response.stream
:
import cStringIO
file = cStringIO.StringIO(row.Picture)
return response.stream(file)
只为想知道最终结果的人:
看起来这已在以下 web2py 版本之一中得到解决。
目前我只是在做 "return dbpic" 并且工作正常。
我是 Python 和 web2py 的新手,目前正面临一个奇怪的问题。 我的数据库(SQL 服务器)中存储了图像(图片),我正试图在我的网站上显示这些图像。我已经设法访问数据库并将信息带到网页上,但是我在处理图片时遇到了问题。
经过长时间的尝试,我终于找到了我的问题所在,正如我的 "Download" 函数的以下代码所示。如果我尝试从数据库中读取图像并 return 它,网络浏览器就会卡住并且什么都不显示。如果我将图像保存到临时静态文件,然后读取它然后 return 结果,一切正常。
我唯一的猜测是它与变量的范围有关,但我不确定。这是我的代码:
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
在 web2py 中,您不能简单地 return 文件对象,而必须使用 response.stream
:
import cStringIO
file = cStringIO.StringIO(row.Picture)
return response.stream(file)
只为想知道最终结果的人: 看起来这已在以下 web2py 版本之一中得到解决。 目前我只是在做 "return dbpic" 并且工作正常。