2016-03-31 3 views
0

Ich bin neu in Python und web2py und habe derzeit ein seltsames Problem. Ich habe Bilder (Bilder) in meiner Datenbank (SQL Server) gespeichert, die ich auf meiner Website anzeigen möchte. Ich habe es geschafft, auf die Datenbank zuzugreifen und die Informationen auf die Webseite zu bringen, aber ich habe Probleme mit den Bildern.Warum kann ich ein Bild nicht von einer Funktion zurückgeben, ohne es vorher in einer Datei zu speichern?

Endlich, nachdem ich lange versucht hatte, konnte ich mein Problem genau lokalisieren, wie im folgenden Code meiner "Download" -Funktion zu sehen ist. Wenn ich versuche, das Bild aus der Datenbank zu lesen und es zurückzugeben, bleibt der Webbrowser hängen und zeigt nichts. Wenn ich das Bild in eine temporäre statische Datei speichere, dann lese es und DANN gib das Ergebnis zurück, alles funktioniert gut.

Meine einzige Vermutung ist, dass es etwas mit Umfang der Variablen zu tun hat, aber ich bin mir nicht sicher. Hier ist mein Code:

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 
+0

Ist das hilfreich? [web2py img download] (http://stackoverflow.com/questions/12540213/web2py-downloading-files-displaying-images?rq=1) – formatkaka

+0

was ist der Typ von 'dbpic' und' filepic'? Ich würde annehmen, 'filepic' ist ein' bytes' Objekt, aber ich bin nicht sicher über 'dbpic' –

+0

Haben Sie die richtigen Header gesetzt? Wie sehen die Request- und Response-Header im Browser aus? Versuchen Sie, die Bilder als '' oder als Download-Link einzubinden? – Torxed

Antwort

0

In web2py, können Sie nicht einfach ein Dateiobjekt zurück, sondern muss stattdessen response.stream:

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

Sie auch die web2py DAL betrachten könnte mit und unter Ausnutzung seiner eingebauten in Funktionalität zum Speichern und Abrufen von Dateien (siehe here und here).

Verwandte Themen