Wie schreibt man ein Bild in einen Browser als binären Stream in Coldfusion?

7

Ich habe einen Service auf einem Coldfusion 9-Server, der Image-Banner für uns erstellt. Ein separater Rechner muss diese Dateien mit etwas wie:

speichern %Vor%

Das Problem ist, dass ich mir nicht vorstellen kann, wie ich Coldfusion bekomme, um Binärdaten auszugeben, ohne eine temporäre Datei zu verwenden. In der Minute wird das Bild nur als Bild-Tag wie folgt angezeigt:

%Vor%

Irgendwelche Ideen? Oder sollte ich nur eine temporäre Datei verwenden?

    
boodle 12.04.2011, 14:29
quelle

5 Antworten

12

Ich kann nicht testen, weil Sie keinen Beispielcode für die Art und Weise angeben, wie Ihre Bilder erzeugt werden, aber haben Sie etwas in dieser Zeile versucht?

%Vor%

Update: Also habe ich mein eigenes Image erstellt; Ich nehme an, du tust etwas Ähnliches. Das funktioniert perfekt für mich:

%Vor%

Dies funktioniert, ohne in eine Datei zu schreiben und ohne ein virtuelles Dateisystem ("ramdisk") zu verwenden

    
Adam Tuttle 12.04.2011 14:57
quelle
5

Wenn Sie die binären Bytes einer Datei / eines Bildes haben, können Sie den Ausgabepuffer mit seinem Inhalt wie folgt ersetzen:

%Vor%

Ziemlich viel was <cfcontent> macht, wenn Sie reset="true"

verwenden

Der Vorteil dieser Methode gegenüber <cfcontent> ist, dass wir sie in unsere cfscript-basierten cfcs schreiben können.

    
Mike Causer 15.12.2011 17:41
quelle
4

Ich habe die obige Lösung gefunden

%Vor%

nicht ganz für mich arbeiten.

Einstellungstyp="image / png" stellt nur den Mime-Typ der Antwort ein. Ich glaube nicht, dass es das Bild notwendigerweise als PNG kodiert. Das Erzeugen eines transparenten png (Bildtyp "argb") hat mir also im Vergleich zur <cfimage action = "writeToBrowser"...> Methode seltsame Farben gegeben.

Ich dachte, dass ich irgendwie die Bilddaten als PNG kodieren und die binären Daten direkt ausgeben müsste.

Nachdem ich im darunterliegenden Java herumgegrubbelt habe, kam ich auf dieses Problem, was bisher bei mir funktioniert.

In diesem Beispiel wird ein transparentes PNG mit einem schwarzen Kreis gezeichnet.

%Vor%

Ich hoffe, das hilft jemandem!

    
Ross Taylor 29.05.2012 09:43
quelle
3

Nehmen Sie die Attribute height und width heraus und fügen Sie das Attribut format hinzu:

%Vor%

wget sollte die Umleitung auf die physische Datei berücksichtigen, die CF im CFFileServlet-Ordner erstellt, aber wenn dies nicht der Fall ist, können Sie ein Flag setzen, um --max-redirect=10 zu machen.

Und wie Sie vorschlagen, würde auch eine temporäre Datei funktionieren. Schreiben Sie einfach die Datei und verwenden Sie cfheader und cfcontent, um sie auszugeben. Stellen Sie nur sicher, dass der Name der temporären Datei eindeutiger ist.

%Vor%     
Matt Shooks 12.04.2011 15:01
quelle
0

Ich mache eine ähnliche Sache, und Sie müssen Tags und cfscript kombinieren. Es gibt Bildfunktionen, die benötigt werden. Wenn Sie ein Bild als Variable gespeichert haben, stehen Ihnen viele Bildfunktionen zur Verfügung. Sie können das Bild mit CFFILE oder CFHTTP oder auf andere Arten in den Speicher holen.

In meinem Fall lese ich eine Bilddatei mit dem CFIMAGE-Tag in den Speicher und manipuliere sie dann mit den CFSCRIPT-Bildfunktionen, indem ich unten Text hinzufüge und dann das resultierende Bild als .png (oder als .jpg, falls gewünscht) ausgabe. zum Browser. Die einzige auf dem Server gespeicherte Datei ist die ursprüngliche Bilddatei. In Ihrem Fall würden Sie, anstatt ein Bild einzulesen, es mit einem cfhttp-Tag aufrufen, wie Sie es bereits tun. Hier ist mein Code:

%Vor%

Sie können es in Aktion bei Ссылка

sehen

(Ich verwende CF9 mit Windows Server)

    
user3001950 06.08.2014 11:33
quelle

Tags und Links