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
Du musst angemeldet sein, um einen Kommentar abzugeben.
To, wen es betreffen kann, ist hier, wie ich gelöst/umgangen es:
Ging ich mit der fetch-anderen-Seite-route. Vielleicht war ich zu technisch oder zu schwierig in meinem op, aber im Nachhinein denke ich, ich könnte habe gekocht es auf:
"rufen Sie ein image-blob über ajax und anzeigen".
Also, wenn Sie, dass Ringe von Glocken für jedermann, lassen Sie es mich wissen.
Einige Berichtigung zu:
meine Bilder-Tisch ist ein Kind der contacts-Tabelle, so wie meine FK zwischen diesen Bildern ist.contact_id -> Kontakt.id
Ich habe eine neue Seite erstellt in meine Anwendung ein, und setzen Sie ein Formular, basierend auf meine Bilder-Tabelle. Ich zeige nur 2 Elemente vom Typ 'display image' (ein thumbnail und Originalgröße), und 2 versteckte Objekte, die 'ID' und 'CONTACT_ID'. Ich habe alle entfernt, die nicht nötig war: keine Tasten, keine DML-Prozess, keine Beschriftungen, keine Vorlagen.
Die automatisierte row fetch-Prozess nimmt als 'primary key' meine Kontakt-id, so kann ich rufen Sie die Seite mit contact_id in der url (damit ich nicht einen extra wählen Sie zum abrufen der richtigen id in der Bild-Tabelle).
Auf der Seite, ich brauche die Bilder, ich bekomme dann die Seite mit den Fotos bei Bedarf (sprich: wenn das detail-Symbol geklickt, und ich zeige meine popup).
Folgendes Stück code aufgerufen wird diese Funktion
(nur code 'fehlen' hier ist, wo ich rufen Sie eine andere Seite zu verarbeiten, um mich zu Holen Kontakt-details in einem json-format)
Ich würde nicht nennen es ideal, aber es funktioniert, und das ist alles was ich brauche in dieser Zeit 🙂
Anzeigen eines Bildes kann so einfach wie das erstellen eines Elements vom Typ: "Bild". Einstellungen: "Blob-Spalte zurückgegeben, die von der sql-Anweisung".
Und dann eine sql-Anweisung der Auswahl der richtigen Zeile:
wählen Sie blob_content
von my_bitmap_table
where ID = ...
Machte ich eine sehr ähnliche Anwendung mit Kontakt-details, inklusive Fotos vor ein paar Monaten in apex.
Fand ich diese web-Seite sehr nützlich:
http://blog.hilandco.com/2010/05/how-to-show-blob-type-column-as-image.html