Domino 9 und frühere Versionen > ND9: Entwicklung
xpage Bild von einem anderen Server holen
HH:
Hallo,
habe schon jede Menge gegoogled, aber keine Lösung zu meinem Problem gefunden:
Auf Server A (extern) befindet sich Datenbank A mit einer xpage, die Daten von Server B (intern) aus Datenbank B abruft. Das Ziel, das ich damit verfolge ist, keine Daten auf Server A zu halten. Zwischen den Servern ist lediglich Port 1352 offen.
Probleme bereiten mir dabei die Bilder in Datenbank B.
Wie kann man Bilder aus DB B in einer xpage auf Server A zur Anzeige bringen?
Gruß
Hubert
pram:
Du musst die Bildresource von Server A auf Server B auslesen.
Damit Server A auf Server B zugreifen darf, muss Server A als vertrauenswürdiger Server ins Serverdokument B eingetragen
Optimal wäre hier ein Servlet, es sollte aber auch mit einer XPage ohne allzugroße Performanceeinbußen gehen.
Technisch liest du die Daten über "com.ibm.designer.domino.napi.design.FileAccess.readFileContent" ein und schickst sie zum Browser
Bei Sven Hasselbach hab ich da auf die Schnelle folgendes gefunden:
loadBinaryFile zum Auslesen der Datei:
=> https://github.com/hasselbach/domino-napi-utils/blob/master/src/ch/hasselba/napi/NAPIUtils.java
=> http://hasselba.ch/blog/?p=1763
Schreiben einer Bilddatei in den ServletOutputstream
=> http://hasselba.ch/blog/?p=871
Möglicherweise könnte untenstehendes Beispiel sogar schon funktionieren (habs nicht getestet)
Gruß
Roland
--- Code: ---<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="true">
<xp:this.afterRenderResponse>
<![CDATA[#{javascript:
importPackage( ch.hasselba.napi );
var exCon = facesContext.getExternalContext();
var response = exCon.getResponse().getDelegate();
var imageStream = NAPIUtils.loadBinaryFile("server","db.nsf","image.jpg")
response.setContentType("image/jpg");
var out= response.getOutputStream();
var buffer = new byte[32 * 1024];
while (true) {
var r = imageStream.read(buffer);
if (r == -1) {
break;
}
out.write(buffer, 0, r);
}
imageStream.close();
}]]>
</xp:this.afterRenderResponse>
--- Ende Code ---
</xp:view>
HH:
Hallo Roland,
erst einmal herzlichen Dank für die Antwort. Leider habe ich in Sachen Java quasi Null Erfahrung. Den Quellcode in den Links verstehe ich zwar, es scheitert bei mir allerdings an der vermutlich simplen Umsetzung.
Wie bzw. wo muss ich die erforderlichen .jar Dateien importieren / einbinden?
Gruß
Hubert
pram:
Hallo Hubert,
um Java wirst du hier vermutlich nicht herum kommen. Ein paar Fragen hätte ich noch im Vorfeld:
- Die Bilder liegen in der anderen DB als Bildresource und nicht als Anhang im Dokument, richtig?
- Wie ist denn deine Erfahrung bzgl. XPage + ServerSide-Javascript
Den Java-Code musst du unter Code/Java ablegen. Siehe hier Seite 90:
http://www.assono.de/blog/downloads/EC12-Java-Notes-Domino-XPages-PDF/$file/EC12-Java-Notes-Domino-XPages.pdf
Noch eine Warnung: Ich habe in meinem Ursprungspost noch geschrieben "ohne allzugroße Performanceeinbußen":
Bei XPages ist es leider so, dass die Requests pro User nacheinander abgearbeitet werden. D.h. sind auf einer Seite 5 Bilder gleichzeitig, so werden diese nacheinander geladen. Je nach dem wie schnell/langsam deine Port1352 Verbindung ist, kann das doch beachtliche Auswirkungen haben.
=> Hier musst du dann wirklich ein Servlet schreiben, dies hat diese Begrenzung nicht.
Gruß
Roland
HH:
Hallo Roland,
hab's dank deiner Hinweise mit Bildresourcen hinbekommen.
Die Bilder liegen allerdings nicht als Bildresourcen vor, sondern als Anhänge. Hier wäre ich für einen Hinweis dankbar, wie ich an die herankomme.
Ursprünglich komme ich aus der nativen Notes-Entwicklung mit @functions und LotusScript (knapp 20 Jahre). Ich beschäftige mich ca. seit einem Jahr sporadisch mit xpages und damit auch mit SSJS. Leider bin ich hier als Domino-Entwickler Einzelkämpfer und stosse somit sehr schnell an meine Grenzen. Umso dankbarer bin ich für Deine Antworten.
Gruß
Hubert
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln