Un utente tramite un file upload da pagina html invia un'immagine dal suo file system ad una servlet. La servlet deve memorizzare l'immagine da qualche parte e poi deve poterla restituire al client.
Uso eclipse con apache tomcat 6.0 sotto window 7 ma non riesco a a fare funzionare le cose.
Esattamente appoggiandomi su una libreria esterna leggo l'immagine dell'utente e riesco a salvarla nel workspace di Eclipse (e' giusto salvarla qui?).
Ma poi non riesco a leggere l'immagine? Viene restituito il contenuto html della servlet di risposta senza visualizzare l'immagine.
Vi prego aiutatemi.
Page html:
codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Immagini</title>
<script type="text/javascript">
function gestisciImmagine()
{
var nome_immagine = document.upload.file_inviato.value;
if(!nome_immagine.match(/(\.jpg|\.jpeg|\.png)$/i))
{
alert("Non hai selezionato un'immagine o hai selezionato un'immagine in un formato non valido");
return;//naturalmente qui andrebbe gestito meglio, evitando la submit ma e' solo una prova
}
}
</script>
</head>
<body>
Seleziona un file da memorizzare nel database:</p>
<form name="upload" enctype="multipart/form-data" method="post" action="/ProvaServlet/CaricareImmagini">
<input type="file" name="file_inviato" onChange="gestisciImmagine();" value=""/>
<input type="submit" name="invia" value="Invia file"/>
</p>
</form>
</body>
</html>
La servlet:
codice:
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.*;
//import com.oreilly.servlet.multipart.*;
/**
* Servlet implementation class CaricareImmagini
*/
public class CaricareImmagini extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
MultipartRequest multi = new MultipartRequest(request,".");
File f = multi.getFile("file_inviato");
String fileName = multi.getFilesystemName("file_inviato"); //il contenuto di fileName lo posso salvare in un database
if (f!=null)
{
File fOUT = new File("C:\\Users\\Nick\\workspace\\ProvaServlet\\WebContent\\Immagini\\",fileName);//1
//il path sopra effettivamente manda l'immagine nel workspace
FileInputStream fIS = new FileInputStream(f); //l'inputstream FIS legge dal file f
FileOutputStream fOS = new FileOutputStream(fOUT);//
while (fIS.available()>0)//l'inputstream fIS legge dal file f e l'outputstream FOS scrive sul file fOUT
fOS.write(fIS.read());
fIS.close();
fOS.close();
}
response.setContentType( "text/html" );
response.setHeader("Expires", System.currentTimeMillis()+"");
PrintWriter out = response.getWriter();
// send HTML page to client
out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">");
out.println( "<html>" );
// head section of document
out.println( "<head>" );
out.println( "<title>A Simple Servlet Example</title>" );
out.println( "</head>" );
// body section of document
out.println( "<body>" );
out.println( "<h1>Visualizzo l'immagine</h1>" );
String g="http://localhost:8080/ProvaServlet/Immagini/"+fileName;
String h="src="+"\""+g+"\"";
out.println( "<img "+h+"/>" );
out.println( "</body>" );
out.println( "</html>" );
out.close(); // close stream to complete the page*/
}
}
La libreria esterna e' reperibile qui: http://www.servlets.com/resources/co...let/index.html