6

これは私の最初の質問です。

ユーザーに自分の画像をデータベースにアップロードさせています。その画像は BLOB として保存されます。

私はこれを成功させることができました。データベースにMySQLを使用しています。

私が問題を抱えているのは、その BLOB が呼び出されたときに、その BLOB を Web サイトに画像として表示することです。

現在、バイナリ データのみ、多くの奇妙なシンボルが表示されています。HTTPヘッダーに問題があると思います。現在、その中にあります:

print "Content-Type: text/html"

私はもう試した:

print "Content-Type: image/jpeg"

Python を使用してデータベースに接続し、HTML を記述しています。

編集:コード:

def showFile():

    # do SQL to retrieve blob where filename
    conn, cursor = getConnectionAndCursor()
    sql = """
    select data
    from upload 
    where id=1
    """
    cursor.execute(sql)
    data = cursor.fetchone()
    blob = data[0]

    print "<hr>"
    print "This is what I'm trying"
    print """<img  src="data:image/jpeg;base64,%s/>""" % data

######################################################################
if __name__ == "__main__":

    form = cgi.FieldStorage()

    if "show_file" in form:
        print "Content-Type: text/html"
        print 
        printHeaders("Image upload example")
        showFile()
        printFooter()
4

4 に答える 4

6

エンコード方法によっては、画像のデータ URI を使用することもできます。base64 PNG としてエンコードされている場合、このようなものが機能する可能性があります。

<img  src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." />

@Alok が言うように、最初にバイナリ blob から base64 に変換してから、Data URI を使用する必要がある場合があります。

于 2013-04-29T14:11:43.360 に答える
1

さて、HTML 応答を返し、既存の回答の組み合わせを使用するか、単にimage/jpeg応答を返し、BLOB を stdout に直接ダンプすることができます。

def showFile():

    # do SQL to retrieve blob where filename
    conn, cursor = getConnectionAndCursor()
    sql = """
    select data
    from upload 
    where id=1
    """
    cursor.execute(sql)
    data = cursor.fetchone()
    blob = data[0]

    print blob

if __name__ == "__main__":

    form = cgi.FieldStorage()

    if "show_file" in form:
        print "Content-Type: image/jpeg"
        print 
        showFile()

...しかし、それはあなたが何を達成しようとしているかによって異なります。

于 2013-04-30T19:47:12.723 に答える