Dateien aus der HTML DB herunterladen ...
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