Ciao, ho un problema con un progetto.
Devo prendere dei dati in input da salvare su db da un form html fra cui un immagine.
Il nome dell'immagine deve essere salvato su db mentre il file vero e proprio in una cartella del server.
Sto cercando di usare ajax per salvare l'immagine prima di spedire tutti i dati su db ma qualcosa non funziona nella servlet CaricaGioco, quella che dovrebbe salvare il file su disco .
Quando esegue List<FileItem> items = upload.parseRequest(request) esce dalla servlet senza lanciare eccezzioni o errori.
Un dubbio: L'immagine mandata alla servlet con ajax è di tipo multipart anche se non la invio con il submit?
Sono alle prime armi con ajax quindi ogni aiuto è apprezzato :-)
Grazie in anticipo.
Ecco il codice:
Html:
Javascript:codice:<form action="Dispatcher?cmd=salvaGioco" enctype="multipart/form-data" method="POST"> <div id="Left"> // qui ho una serie di combobox e input text Immagine: </p> <input id="inputImmagine" type="file" name="file"/> <input onclick="caricaImmagine();" type="button" value="Carica" /> <input id="salva" type="submit" value="Salva Gioco"/> </div> </form>
Java:codice:var request; function initRequest() { //creo l'XMLHTTPRequest } function caricaImmagine(){ request = initRequest(); var fileElement = document.getElementById("inputImmagine"); var file = fileElement.files[0].value; var formData = new FormData(); formData.append("file", file); var url = "CaricaImmagine"; request.open( "POST", url ); request.onreadystatechange = callback; request.send( formData ); } function callback(){ if (request.readyState == 4) { if (request.status == 200) { parseMessages(request.responseXML); } } } function parseMessages(responseXML){ //uso i dati restituiti } }
codice:@WebServlet(name = "CaricaImmagine", urlPatterns = {"/CaricaImmagine"}) public class CaricaImmagine extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); int dimensioneMaxInByte = 10 * 1024 * 1024; // 10 MiB try { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(dimensioneMaxInByte); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request); //<----- qui il problema // qui lavoro sul mio file } catch (Exception ex) { Logger.getLogger(CaricaGioco.class.getName()).log(Level.SEVERE, null, ex); } } }

Rispondi quotando
