|
Dateien aus der HTML DB herunterladen
In der letzten Ausgabe wurde beschrieben, wie man Dateien mit einer
HTML DB Anwendung in eigene Tabellen hochladen kann. In dieser Ausgabe
sehen Sie, wie man diese Dateien in einer Übersicht darstellt, damit
der Nutzer sie auf Klick wieder herunterladen kann.
Der erste Schritt in der letzten Ausgabe war das Anlegen der Tabelle
DOKUMENT_TAB. Legen Sie nun auf diese Tabelle einen
Bericht an.
Der Bericht selektiert neben der ID der
hochgeladenen Datei auch Name, Beschreibung, Dateityp
(MIMETYPE) und schließlich mit
(DBMS_LOB.GETLENGTH()) die Größe der
hochgeladenen Datei. Das Ergebnis sieht nach einigen Arbeiten an der
Ausrichtung und am Zahlenformat wie folgt aus.
Nun geht es daran, die Datei per Mausklick wieder herunterzuladen. Am einfachsten
dürfte das aus dem soeben erstellten Bericht möglich sein. Dieser soll so geändert
werden, dass die Datei bei einem Klick auf den Dateinamen heruntergeladen wird.
Das Herunterladen selbst kann nicht durch ein einfaches
SELECT erfolgen; dazu ist - wie beim Hochladen - wieder etwas PL/SQL Code
erforderlich. Gehen Sie in den SQL-Workshop und legen Sie
eine neue PL/SQL Prozedur wie folgt an. Die Erklärungen zu den Anweisungen finden
Sie als Kommentar (--) in der Prozedur selbst.
create or replace procedure datei_herunterladen (p_id in number)
is
v_mimetype dokument_tab.mimetype%TYPE;
v_datei dokument_tab.dokument%TYPE;
v_name dokument_tab.name%TYPE;
v_groesse number;
begin
-- Die Datei, deren Name, Typ und Größe wird aus der Tabelle geholt
-- und in PL/SQL Variablen abgelegt.
select name, mimetype, dokument, dbms_lob.getlength(dokument)
into v_name, v_mimetype, v_datei, v_groesse
from dokument_tab where id = p_id;
-- Im HTTP-Header wird der Dateityp gesetzt. Damit erkennt der Browser
-- welche Applikation (bspw. MS Word) zu starten ist
owa_util.mime_header(nvl(v_mimetype,'application/octet'),false);
-- Die Dateigröße wird dem Browser ebenfalls mitgeteilt
htp.p('Content-length:'|| v_groesse);
-- Der Browser soll die Datei nicht sofort anzeigen (Virengefahr), sondern
-- die Datei zunächst auf die Festplatte des Nutzers speichern bzw. diesen
-- erst fragen.
htp.p('Content-Disposition: attachment; filename='||v_name);
owa_util.http_header_close;
-- Dieser kurze Aufruf führt den eigentlichen Datei-Download durch.
wpg_docload.download_file(v_datei);
end;
Nach dem Klick auf SQL Ausführen ist die
Prozedur angelegt. Führen Sie anschließend noch folgende SQL-Anweisung aus, damit
die Prozedur einwandfrei funktioniert:
grant execute on DATEI_HERUNTERLADEN to public
/
Wechseln Sie nun wieder in den Application Builder
und dort auf die Seite mit dem Bericht, den Sie eingangs erstellt haben. Klicken Sie
unter Regionen auf Ihren Bericht und anschließend
auf die Reiterkarte Berichtsattribute.
Klicken Sie auf das Editiersymbol ( ) der Berichtsspalte NAME
und navieren Sie dann zu Link. Der Name der
Datei soll dargestellt werden - bei Klick auf den Link soll die soeben erstellte
PL/SQL-Prozedur zum Datei-Download aufgerufen werden. Beachten Sie die Übergabe
der ID an die Prozedur. So findet die Prozedur
die angeklickte Datei wieder.
Bestätigen Sie die gemachten Änderungen und starten Sie anschließend die Seite neu. Wenn Sie nun auf den Namen der Datei
klicken, sollte der Download beginnen.
Diesen Tipp können Sie zusammen mit dem der letzten Ausgabe in einem HTML DB How To Dokument nachlesen. Wie man diese Funktionalität zur Kombination von Bildern mit relationalen Tabellen nutzt, erfahren Sie in der nächsten Ausgabe.
Zurück zur Community-Seite
|