Salve,
Io ho una applet che invia a una servlet un file e la servlet scrive il file su disco. Per ogni file di cui faccio l'upload con l'applet ho una Progress bar che si deve aggiornare fino alla completa scrittura (da parte della servlet) del file. Quindi invio la grandezza del file dalla servlet all'applet, man mano che la servlet scrive sul file. Però il valore che l'applet riceve alla fine non corrisponde alla grandezza effettiva del file, anche se il file è scritto correttamente. Penso ci sia qlke problema con i tipi di dato long e int ma non riesco a trovarlo!!!
Codice applet
Codice servletcodice:FileInputStream in = new FileInputStream(file); System.out.println(file.length());//Scrive la giusta grandezza del file in bytes byte[] buf=new byte[in.available()]; int bytesread = 0; String nome = nomi[i]; //URLEncoder.encode(nome); String toservlet = "http://localhost:8080/Tesi2/servletupload?nome="+URLEncoder.encode(nome); System.out.println(toservlet); URL servleturl = new URL(toservlet); URLConnection servletconnection = servleturl.openConnection(); servletconnection.setDoInput(true); servletconnection.setDoOutput(true); servletconnection.setUseCaches(false); servletconnection.setDefaultUseCaches(false); servletconnection.setRequestProperty("Content-Type","application/x-java-serialized-object"); DataOutputStream out=new DataOutputStream(servletconnection.getOutputStream()); while( (bytesread = in.read( buf )) > -1 ){ out.write( buf, 0, bytesread ); } out.flush(); out.close(); in.close(); System.out.println("file inviato"); DataInputStream inputFromClient = new DataInputStream(servletconnection.getInputStream()); int val,tot=0; while((val= inputFromClient.read())>=0){ System.out.println((tot=tot+val)); } inputFromClient.close();
codice:File yourFile = new File(path); FileOutputStream toFile = new FileOutputStream( yourFile ); DataInputStream fromClient = new DataInputStream( req.getInputStream() ); DataOutputStream toClient = new DataOutputStream (res.getOutputStream()); byte[] buff = new byte[1024]; int cnt = 0; while( (cnt = fromClient.read( buff )) > -1 ) { toFile.write( buff, 0, cnt ); toFile.flush(); toClient.write((int)yourFile.length()); } toFile.close(); fromClient.close();![]()

Rispondi quotando