|
Bilder mit relationalen Tabellendaten kombinieren
In den letzten Ausgaben wurde beschrieben, wie Sie Anwendungen
zum Hoch- und Herunterladen von Dateien mit der HTML DB erstellen
können. Lesen Sie in dieser Ausgabe nochmals eine Zusammenfassung
und darüber hinaus, wie Sie diese Technologie zur Integration von
Bildern in ihre Anwendung nutzen können.
Ausgangsbasis ist eine Anwendung basierend auf den bekannten Tabellen
EMP und DEPT.
Diese Datensätze werden mit einem Formular bearbeitet. Ziel ist es, zu jedem
Mitarbeiter ein Bild hochladen und in dieser Übersicht anzeigen zu können.
Zunächst benötigen wir in der Tabelle EMP zusätzliche
Spalten - sie sollen das hochgeladene Bild aufnehmen. Da es verschiedenste Arten von
Bildern gibt, werden zwei Spalten benötigt: Eine enthält das Bild selbst, die andere
nimmt den Mime-Type auf und gibt damit an, ob
es sich um ein GIF, JPEG, PNG oder ein anderes Bild handelt. Nennen Sie die Spalte
für das Bild PICTURE und die für den Mime-Type
MIMETYPE.
Das Formular zum Bearbeiten der Datensätze erstellen Sie am besten mit
den bekannten HTML DB Assistenten (Form auf Tabelle).
Fügen Sie dem Formular nach Erstellung ein neues Element zum Hochladen einer
Datei hinzu.
Anschließend sollte das Formular in etwa wie folgt aussehen:
Wie in den Tipps der letzten Wochen beschrieben, wird auch hier wiederum ein
PL/SQL-Prozeß benötigt, der das Bild aus der HTMLDB-Systemtabelle
WWV_FLOW_FILES herausnimmt und in die
Tabelle EMP speichert. Dies soll jedoch
nur geschehen, wenn tatsächlich ein Bild hochgeladen wurde. Dies lässt sich
am einfachsten anhand des Mime-Type feststellen. Mime-Types für Bilder fangen
mit "image/" an. Legen Sie also nun einen
PL/SQL-Prozeß an und hinterlegen Sie
folgenden PL/SQL-Code:
declare
v_mimetype varchar2(100);
v_bild blob;
begin
select blob_content, mime_type into v_bild, v_mimetype
from wwv_flow_files where name=:P2_BILD;
if lower(substr(v_mimetype,1,5)) = 'image' then
update EMP set
PICTURE = v_bild,
MIMETYPE = v_mimetype
where EMPNO = :P2_EMPNO;
end if;
delete from wwv_flow_files where name=:P2_BILD;
end;
In diesem Beispiel sorgt
der vom HTML DB Assistenten erzeugte Prozeß
Process Row of EMP dafür, dass die relationalen Tabellenattribute
eingefügt bzw. geändert werden. Der soeben angelegte PL/SQL-Prozeß
UPDATE_IMAGE sorgt dafür, dass das
hochgeladene Bild entsprechend in die Tabelle eingetragen wird. Legen
Sie fest, dass Ihr PL/SQL-Prozeß nur beim Klick auf die Schaltflächen
CREATE pder SAVE
aktiv wird.
Damit sind die Arbeiten am Formular getan. Damit das Bild angezeigt werden kann
wird zunächst - wie im letzten "Tipp der Woche" - eine PL/SQL-Prozedur
benötigt, die
zum Herunterladen des Bildes dient. Legen Sie also im
SQL Workshop eine neue Prozedur an. Sie
nimmt als Parameter die EMPNO entgegen und
gibt daraufhin das in der Tabelle EMP
gespeicherte Bild aus. Vergessen Sie nicht, das GRANT EXECUTE
-Kommando abzusetzen.
CREATE OR REPLACE PROCEDURE emp_bild_zeigen (p_empno IN NUMBER)
IS
v_laenge NUMBER := 0;
v_bild emp.picture%TYPE;
v_mimetype emp.mimetype%TYPE;
BEGIN
BEGIN
SELECT picture, mimetype, DBMS_LOB.GETLENGTH(picture)
INTO v_bild, v_mimetype, v_laenge
FROM emp where empno=p_empno;
OWA_UTIL.MIME_HEADER(v_mimetype,false);
HTP.P('Content-length:'|| v_laenge);
OWA_UTIL.HTTP_HEADER_CLOSE;
WPG_DOCLOAD.DOWNLOAD_FILE(v_bild);
EXCEPTION
WHEN OTHERS THEN NULL;
END;
END;
GRANT EXECUTE ON emp_bild_zeigen TO PUBLIC
Nun erfolgen die Arbeiten am Bericht auf der Übersichtsseite. Es ist gleich,
ob er als Einfacher Bericht oder als
SQL Bericht erstellt wurde. Fügen Sie ihm
eine "Pseudospalte" (der Inhalt ist ohne Bedeutung; wir brauchen lediglich
eine weitere Spalte) hinzu - im SQL Bericht sieht das wie folgt aus.
Im Beispiel zeigt die neue Spalte PICTURE lediglich
die EMPNO an. Dort soll jedoch das
hochgeladene Bild erscheinen. Um dies zu erreichen, navigieren Sie zu den
Attributen der neuen Spalte.
Im Bereich Spaltenformatierung verwenden Sie
nun das HTML-Tag zum Einbinden von Bildern (IMG). Die Quelle
(src) ist nun jedoch die soeben erstellte PL/SQL-Prozedur, die
als Parameter die EMPNO übergeben bekommt.
Laden Sie nun zu einem der Einträge ein Bild hoch und schauen Sie sich das
Ergebnis an.
Natürlich sind auch hier noch Erweiterungen denkbar. So könnte man ein
"Standardbild" definieren, welches automatisch gespeichert wird,
wenn der Benutzer keins angibt. Außerdem wird die Datei, wenn sie kein Bild
ist, in diesem Beispiel ignoriert. Eine Fehlermeldung wäre im "realen Leben"
natürlich wünschenswert.
Zurück zur Community-Seite
|