2016-06-16 7 views
1

Ich erstelle eine Bild-Upload-App mit Feder mvc. Ich habe das Bild erfolgreich in einem externen Ordner gespeichert. Code zum Speichern des Bildes ist wie folgt:Spring MVC Anzeige hochgeladenes Bild in einen externen Ordner

MultipartFile productImage = product.getProductImage(); 

     path= Paths.get("/oms/images/"+product.getProductName()+".jpg"); 

     System.out.println(path.toString()); 
     if(productImage!=null && !productImage.isEmpty()){ 

      try { 
       productImage.transferTo(new File(path.toString())); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       throw new RuntimeException("Product Image Saving Failed ",e); 

      } 
     } 

Bild wird immer in diesen externen Ordner successfully.But gespeichert, wenn ich das gleiche Bild in eine jsp Datei anzuzeigen versuchen, beende ich diesen Fehler up bekommen ... wie diese.

http://localhost:8081/oms/images/Ss.jpg Failed to load resource: the server responded with a status of 404 (Not Found) 
http://localhost:8081/oms/images/pup.jpg Failed to load resource: the server responded with a status of 404 (Not Found) 

der Code um das Bild anzuzeigen ist ...

<img src="<c:url value="/oms/images/${product.productName}.jpg"/>"/> 

ich etwas mehr paar Links zum gleichen Thema gesehen, aber meistens Frage ist wie Bilder in ein anderes zu retten Verzeichnis als Webapp (offensichtlich)!

Bitte schauen Sie in das Problem. Fehle ich etwas, wie füge ich externe Quellen in den Frühling ein? Was muss ich tun, um vom Benutzer hochgeladene Bilder in der JSP-Seite anzuzeigen?

Prost! Danke im Voraus !!

+0

Bitte lassen Sie mich wissen, wenn ich noch einige Dateien hinzufügen muss. Wie die Bean-Klasse oder die Datei applicationContext.xml. – shiva

Antwort

6

Die obige Lösung nicht für mich .. funktioniert Wenn ich @WebServlet ("/ FetchFile") vom jsp versuchte Aufruf Seite .. @WebServlet ("/ FetchFile") wurde nicht einmal aufgerufen. Ich googeln und fand eine Lösung, die im Frühjahr mvc Dispatcher-servlet.xml wir eine externe Ressource auf diese Weise hinzufügen können ...

<mvc:resources mapping="/images/**" location="file:///${fullPath}/oms/images/" /> 

$ {} fullPath Sie Ihre vollständigen Pfad hier geben sollte .. für mich.

von jsp Seite können Sie die jsp-Datei wie folgt aufrufen .... ich habe endlich die Lösung

<img src="/images/${product.productName}.jpg" alt="image"/> 

nach ganzen Tag und es funktionierte. Prost !!!! Danke @Rizstien

1

Sie können ein Servlet verwenden, um Bilder außerhalb von Webkontext abzurufen, da JSP-Code nur im Webkontext funktioniert. Als Beispiel

@WebServlet("/FetchFile") 
public class FileServlet extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
    { 
     String filename = request.getParameter("productName"); 
     File file = new File("/oms/images/"+filename); 
     response.setHeader("Content-Type", getServletContext().getMimeType(filename)); 
     response.setHeader("Content-Length", String.valueOf(file.length())); 
     response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); 
     Files.copy(file.toPath(), response.getOutputStream()); 
    } 

} 

und Anforderung mit

<img scr="FetchFile?productName=${product.productName}.jpg"> 
+0

Sie meinen, ich sollte diese Methode zum Federcontroller hinzufügen und dann von JSP-Seite ich sollte einen Aufruf an diese Methode machen? – shiva

+0

Ja! Das wäre von Natur aus ein Ajax-Anruf – Rizstien

+0

okay, warte! Lass mich versuchen .. Danke für die Hilfe – shiva