Anzeige BLOBs dynamisch

Vor kurzem habe ich gearbeitet, auf eine eher bescheidene Anwendung, die Listen Kontakte. Wenn ein detail-link wurde geklickt, ein popup kommen würde mit mehr details und ein Bild der jeweiligen kontaktperson.
Die Tabelle war dies basiert auf enthalten eine Spalte photo_reference, die einen Pfad zu einem Ordner unter /ich/. Mit diesem setup war es einfach, die Bilder, die arbeiten für jeden Kontakt.
Das popup habe ich gezeigt, war ein Haufen von htmlcode, die ich in der region Fußzeile, und versteckte sich.

<div id="contact_popup" class="contact_pop">
   <div class="contact_pop_imgcontainer">
      <img id="id_photo" class="contact_pop" />
   </div> 
</div>

Wenn die Details geklickt wurde, ich abgerufenen Daten über eine Anwendung Prozess, und zeigte ein modales Dialogfeld dieser container.

Nun der Umfang hat sich verändert: Nutzer müssen in der Lage, laden Ihre eigenen Bilder. Also, ich ging zur Arbeit und machte es so das Bilder hochgeladen werden, in wwv_flow_files, und dann Verschiebe ich Sie auf einen neuen contact_image Tabelle. So weit So gut. Jetzt will ich aber zeigen diese Bilder, und hier bin ich irgendwie hängengeblieben.
* Ich könnte eine Spalte in meiner IR, und setzen Sie einen blob-format Maske mit Bild. Ich habe diese Arbeit, aber ärgerlich. Mein Bild Tabelle hat als Primärschlüssel das Feld "ID". Meine Kontakte Tabelle hat auch 'ID' als PK.
Da IMAGE:APXT_CONTACTS_IMG:SMALL_PHOTO:ID::::::inline: gibt die ID als PK, es wird ID von mein contacts-Tabelle.
Meine Verknüpfung zwischen Tabellen ist APXT_CONTACTS.CONTACT_IMAGE_ID -> APXT_CONTACTS_IMG.ID.
Die Art, wie ich könnte, damit es funktioniert, ist das umbenennen, mein id-Feld in der Bild-Tabelle zu contact_image_id. (warum nicht das format Maske nehmen Sie einfach die Spalte basiert es auf als den Wert :().
Dann konnte ich das ausblenden der Spalte, und nehmen Sie das Bild mit javascript in meinem popup. Jedoch, diese lädt alle Bilder, die für die Höhe der ausgewählten Zeilen, und die ist nicht ganz schlecht, aber ich bin auf der Suche nach einer alternative ersten.

  • get_blob_file_src auch scheint mir nicht, weil der begrenzte Verwendung der Parameter (Datei durchsuchen Element-id-Feld), und selbst dann, könnte ich diese durch eine ajax-callback?

  • Ich würde viel eher in der Lage sein, um das image blob per ajax, um dann die Anzeige in meinem popup, aber ich habe keine Ahnung, wie dies zu tun. Ich habe aus einer gespeicherten Prozedur wird die Datei zum downloaden und rufen Sie diese aus einer Anwendung Prozess (ajax-callback), und mit firebug sehe ich, dass die post/Antwort, aber ich möchte nicht wissen, wie man diese als ein Bild dargestellt.

Javascript:

function cimg(){
   var get = new htmldb_Get(null, &APP_ID., "APPLICATION_PROCESS=get_img", &APP_PAGE_ID.);
   get.addParam('x01', 25);
   var greturn = get.get();
   alert(greturn);
   var pic = new Image();
   pic.onload = function(){
      document.body.appendChild(pic);
   };
   pic.src = greturn;
};

Seite Prozess:

begin
   show_small_photo(apex_application.g_x01);
end;

Gespeicherte Prozedur:

create or replace procedure "SHOW_SMALL_PHOTO"
(p_contact_image_id IN NUMBER)
is
   v_mime      apxt_contacts_img.mime_type%type;
   v_length    NUMBER;
   v_filename  apxt_contacts_img.filename%type;
   v_lob       BLOB;
begin
    SELECT mime_type, lengthb(small_photo), filename, small_photo
    INTO v_mime, v_length, v_filename, v_lob
    FROM apxt_contacts_img
    WHERE id = p_contact_image_id;

    OWA_UTIL.mime_header (NVL (v_mime, 'application/octet'), FALSE);

    HTP.p ('Content-length: ' || v_length);
    -- needed?
    --HTP.p ('Content-Disposition: attachment; filename="'||v_filename||'"');
    OWA_UTIL.http_header_close;
    wpg_docload.download_file (v_lob);
end;

(Ich würde lieber nicht zu erteilen ausführen, um die öffentlichkeit und rufen Sie die gespeicherte Prozedur, die über einen link.)
Auf diese Weise würde ich nur zum laden der Bilder von links geklickt. Wenn dieser code nicht funktioniert. Ich bekomme den Alarm und sehen eine Menge von diesen komischen chars, so dass ich vermute, dass ist der blob sprechen. Aber ich bin nicht immer ein Bild irgendwo.

Bin ich etwas fehlt? Etwas falsch? Ich bin Total out hinweisen.

Statt meinem vorhandenen code, ich könnte diese Arbeit durch die Schaffung einer anderen Seite, und jonglieren-Seite posten und Ihre Werte, um zu versuchen und erhalten das gleiche layout gehen, und dann bekommen, dass die Seite über ajax?
Ich bin vor allem versuchen, zu minimieren Auswirkungen (=Arbeit) auf die bestehende app, so würde ich nicht noch einmal ändern Seiten.

TL;DR: ist es möglich, zum abrufen und anzeigen eines Bildes blob aus einer Tabelle, die nicht in den Bericht, vorzugsweise durch ajax?

Dies ist Apex 4.02 auf einer 11g-db

Dank,
Tom

InformationsquelleAutor Tom | 2011-09-20
Schreibe einen Kommentar