Используйте python для вывода изображения из BLOB-объекта cx_oracle - PullRequest
2 голосов
/ 16 января 2012

Я сохранил изображения в таблице оракулов в столбце BLOB. Я использую для чтения и вывода изображения и записи данных с использованием JAVA. Я хотел бы сделать то же самое (получить мое изображение и распространить его) с Python. Я использую Flask Framework и cx_Oracle.

Мне удается загрузить содержимое моего BLOB-объекта в мое приложение, но я не уверен, как сгенерировать изображение из этого.

Я знаю, что в Java я использовал:

OutputStream out = response.getOutputStream();
response.setContentType(doc.getContentType());
IOUtils.copy( new ByteArrayInputStream(doc.getContent()),out);
out.flush();

где doc.getContent () - это мое BLOB-содержимое.

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Использование Flask и ваша помощь:

@app.route('/_photo/')
def gripur():

    conn = cx_Oracle.connect("*****","****",make_dsn_tns(get_config_string()))
    curs = conn.cursor()
    #find photo
    document=curs.execute('select myblob from mytable where id=34234')
    row = cursor.fetchone()
    imageBlob = row[0]

    blob= imageBlob.read()
    response = make_response(blob)
    response.headers["Content-type"] = "image/jpeg"
    conn.close()

    return response
2 голосов
/ 16 января 2012

Если у вас есть данные, и вам просто нужно получить их в файл образа на диске, вы можете записать их непосредственно в файл, открытый для записи в двоичном режиме.

import cx_oracle

sql = 'select img_fld from img_table where id=1234'
imagePath = './output/image.png'

conn = cx_oracle.connect('your_connection_string')

cursor = conn.cursor()
cursor.execute(sql)

#assuming one row of image data is returned
row = cursor.fetchone()
imageBlob = row[0]

#open a new file in binary mode
imageFile = open(imagePath,'wb')

#write the data to the file
imageFile.write(imageBlob.read())

#closing the file flushes it to disk
imageFile.close()

cursor.close()
conn.close()

Если вам нужен «файловый» объект без записи на диск, вы можете использовать модуль cStringIO для создания буферов в памяти. https://docs.python.org/library/stringio.html

...