Bilder nach dem Upload nutzen

kinglui

Aktives Mitglied
Hallo zusammen,

ich würde gerne Bilder, welche ich per <tr:inputFile hochlade, direkt wieder anzeigen lassen.
Dazu habe ich folgenden Code:
Java:
package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;

import java.util.ArrayList;

import javax.faces.event.ValueChangeEvent;

import org.apache.myfaces.trinidad.model.ChildPropertyTreeModel;
import org.apache.myfaces.trinidad.model.UploadedFile;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import org.apache.myfaces.trinidad.model.UploadedFile;


public class bt {
  private String img = "/img/flagge_de.jpg";
  
    public void setImg(String img) {
        this.img = img;
    }

    public String getImg() {
        return img;
    }
  
  public void upload(ValueChangeEvent vc) throws IOException {
    UploadedFile file = (UploadedFile)vc.getNewValue();
    String save = "";
    String[] filenameArray = new String[6];
    if (file != null) {
        int n = 0;
        InputStream is = file.getInputStream();
        File f = new File("D:\\uni\\SS10\\webdev\\testJSF\\Project1\\public_html\\img");
        if (!f.isDirectory()) 
            f.mkdir();
        String dir = "D:\\uni\\SS10\\webdev\\testJSF\\Project1\\public_html\\img" ;
        String fileName =  file.getFilename();
        
        save = dir + (File.separator) + fileName;
        FileOutputStream fos = new FileOutputStream(save);
       
          img = "/img/" + fileName;
          this.setImg(img);
          System.out.println(img);
        
        
 
        try {
            //die Datei wird auf den Server geschrieben
            while ((n = is.read()) >= 0)
                fos.write(n);
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
            e.printStackTrace();
        }
    }
  }
    
  
  }
in der jspx sieht das dann wie folgt aus:
HTML:
          <tr:form usesUpload = "true">
          <tr:inputFile label = "Upload demo" valueChangeListener= "#{bt.upload}"/>
          <tr:commandButton text="Go"/>
        </tr:form>
          
          <tr:image source="#{bt.img}"/>

janz rudimentär, wie man sieht (ich hab das mal von meinem richtigen Problem abstrahiert).


Wenn ich jetzt ein Bild hochlade, wird es nicht direkt geändert. erst nach dem neuen deployment des weblogicservers (bzw. live läuft tomcat) kann ich die bilder on-the-file ansteuern.

Ich vermute, dass die "neuen" bilder, nur im lokalen Verzeichnis liegen, nicht aber im Cache des WLS'.

Kann sowas hinkommen?
Wie gesagt, nach dem deployen kann ich die vorhanden Bilder beliebig oft wechseln, wenn sie schon mal "online" waren.

Danke
 

kinglui

Aktives Mitglied
also ich habe die ganz App jetzt nochmal so vereinfacht, dass wirklich nur simple per goLink der Link zur Datei (also Variable "img") als destionation gesetzt wird. Wir erwartet bekomme ich einen 404 Fehler.

Muss ich vielleicht außerhalb des Applikationsservers ein Bereich zur Verfügung stehen, auf den ich uneingeschränkt zugreifen kann?

danke
 

nocturne

Bekanntes Mitglied
goLink ist uns kein Begriff, eine undefinierte variable quasi. Wir wagen es nicht eine Antwort zu formulieren.

Warum speicherst du die Bilddateien nicht als Bytearray in der Datenbank? Du brauchst dann nur noch ein HTTPServlet das eine Bilddatei zurückgibt.
 

kinglui

Aktives Mitglied
Hallo,

Sorry. goLink ist eine Trinidad Komponente.. spielt aber eigentlich auch keine Rolle, das Problem ist ja das selbe.

Bild in einer DB schreiben ginge theoretisch, wird aber afaik bei einer mysql DB nicht empfohlen, oder?

danke
 
M

maki

Gast
Auf jedenfall kannst du dich von der Idee verabschieden die Bilder direkt in den WebApp "Ordner" zu speichern, diesen muss es nämlich nicht geben, bestenfalls sind die Bilder bei einem re-deploy/update der WebApp oder Neustart des Servers weg.
 

kinglui

Aktives Mitglied
okay gut.
Danke für den Hinweis.

Bleibt also nur die DB Möglichkeit, oder seht ihr eine Alternative?
Könnte ich dem Server nicht z.B. Schreibrechte auf ein bestimmtes Verzeichnis außerhalb des Projekts geben (hat hier lokal bei meinen Tests nicht funktioniert)?


Ciao
 

Stroker89

Bekanntes Mitglied
Stehe Momentan vor einem ähnlichen Problem.

User Laden Avatare in ein bestimmtes Verzeichnes in der WebApp hoch:

/avatars/profile

und

/avatars/profile/cropped

das ganze wird dann in der Datenbank gespeichert ungefähr so:

../avatars/profile/beispiel.jpg

Somit ist das Bild in jeder JSP meiner WebApp verfügbar.

Nun stehe ich aber auch vor dem Problem, dass die Bilder ja jedes mal gelöscht werden, sobald die WebApp redeployed wird.

Wie kann man Abhilfe schaffen? Externer Odner? Wenn ja, sind die bilder dann auch mit dem absoluten Pfad der Bilder auf dem Server in JSP einbindbar?
Zum Beispiel liegt Bild auf dem Server unter C:\avatars\profile\beispiel.jpg
wenn ich diesen Pfad dann in einem <img> Tag einbinde, wird das Bild gefunden?

Gruß
 
M

maki

Gast
Eine DB verwenden wäre "sauber", ansonsten einen externen Ordner mit einem sog. "Stream Servlet", der Pfad zum externen Ordner könnte ja zB. als Servlet init parameter in der web.xml hinterlegt werden.
 
M

maki

Gast
k.A., kenne GlassFish nicht wirklich ;)

Aber als AppServer sollte es einen JCA geben um auf das Dateisystem zuzugreifen, ist sauber im Sinne der EJB Spek.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R JSF Bilder aus CSS Datei werden nicht angezeigt. Web Tier 2
H JSF jsf/sessionScoped Bean - Bilder (jpg) werden nicht richtig dargestellt Web Tier 1
N Bilder aus Datenbank dynamisch in JSF streamen Web Tier 7
S JSF Primefaces Thema, Css wird geladen, nur die Bilder nicht, bzw Resource wird nicht aufgelöst Web Tier 5
H im IE werden leere Bilder mit X gekennzeichnet Web Tier 4
K Bilder in Java-Webapplikationen Web Tier 12
M Bilder in Servlets Web Tier 8
M JSP Custom Tag für Bilder Web Tier 14
D Bilder werden nicht angezeigt Web Tier 2
D Bilder werden nicht angezeigt Web Tier 21
H Vorgehensweise: Bilder anzeigen/erstellen in JSP/Servlet ? Web Tier 3
N JSF: Servlet für Bilder: Verbindung zu Spring Service ? Web Tier 1
I HTML nach Image Web Tier 1
F Formular nach erfolgreichem Login ausblenden Web Tier 0
J Session ist nach Klick auf Zurück-Button wieder aktiv Web Tier 3
N RequestDispatcher: include-Aufruf einer jsp scheitert nach mehreren forward-Aufrufen Web Tier 1
J Suche nach einem Webframework Web Tier 5
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
S Rendern einer Komponente nach actionListener Web Tier 2
A Wartezeit nach Tomcat start wegen Servlets zu hoch Web Tier 2
F JSF - Submit nach Validation-Failed Web Tier 6
W JSF Komisches Verhalten nach Login per Realm Web Tier 4
J Nach SVN-Update alle Beans resolved to null Web Tier 3
V JSF oncomplete-Attribut nach action-Attribut auswerten Web Tier 3
K JSP String[] Array nach Javascript Web Tier 4
M JSF Dialog nur nach erfolgreicher Action schließen Web Tier 4
R Errorpage nach ViewExpiredException Web Tier 7
T Seam-Komponenten oder Java Bean soll direkt nach Appserver-Start "leben" Web Tier 4
P JSF Ajax refresh nach Linkklick Web Tier 4
M JSF Kein Zugriff auf ManagedBeans, nach JSF Migration von 1.2 nach 2.0 Web Tier 4
T JSF URL "hängt nach" - warum? Ausblenden möglich? Web Tier 4
T JSF ViewScoped - Zustand verliert sich nach Seitenaktualisierung Web Tier 8
F Migration eines CMS von PHP nach JAVA Web Tier 3
J Memory Leak in Servlet nach längere Laufzeit Web Tier 6
C Formulardaten der Reihe nach auslesen Web Tier 5
E JSF Datatable erst nach Buttonklick anzeigen Web Tier 2
S Webapp und mysql. mysql verliert die verbindung nach langer zeit Web Tier 6
E CSS wird nach RequestDispatcher.redirect nicht mehr geladen Web Tier 7
U SessionAttribut nach j_security_check setzen Web Tier 3
F Redirect nach Aufruf einer JSP Web Tier 5
S [SelectItems value(herkunft bean)] in [UI:repeat] lädt daten nicht neu nach Web Tier 3
hdi File Upload erst nach Prüfung Web Tier 4
D JSF: Best Practice "Session invalidate nach Schließen des Browsers"? Web Tier 3
D JSF: locale verliert Wert nach Navigation Web Tier 6
ruutaiokwu Wert hinter JSP-Tag nach Java-String in Skriptlet Web Tier 4
D Die ewige Suche nach dem richtigen Web-Framework Web Tier 34
M Properties der JSP nach input-result leer (Struts 2) Web Tier 2
S Attribute in Objektliste nach gecheckten Checkboxen setzen Web Tier 4
T Liste nach Anfangsbuchstaben getrennt ausgeben? Web Tier 2
Q browserfenster schließen nach HTTP-Authentifizierung Web Tier 3
T Selectbox nach klick submit Web Tier 1
G Seitenumbruch nach x Elementen Web Tier 3
M Authentifizierung über PhaseListener je nach Seite Web Tier 11
L Argumentübergabe von JSP nach Applet Web Tier 4
F nach Update auf RichFaces 3.2.0 Fehlermeldungen Web Tier 5
I servlet: init wird auch nach ServletException aufgerufen Web Tier 3
S JSF: Ändern von CSS Styles in commandLink nach Klick Web Tier 4
P jax-rs detect aborting upload Web Tier 2
A Servlet File Upload funktioniert nur lokal auf Entwicklungsrechner, nicht in Tomcat Web Tier 5
Y JSF Pdf Upload Web Tier 2
S Picture Upload Web Tier 3
L File Upload - Dateiformat einschränken Web Tier 4
S Servlet File Upload (API oder JSPSmart download) Web Tier 4
E Ftp-Upload von Images Web Tier 2
E Upload per Drag and Drop im IE Web Tier 7
E Jsp file upload Web Tier 3
E File upload mit jsp (frage zum speicherort) Web Tier 12

Ähnliche Java Themen

Neue Themen


Oben