spiego meglio, ho un form nella pag newhtml.html cosi formata
Codice PHP:
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="Controller" method="post" enctype="multipart/form-data">
Uppatoda: <input type="text" name="user">
<input type="file" name="fileUpload"/>
solo file tipo .xls
<input type="submit" value="Invia"/>
</form>
</body>
</html>
quando clicco su invia vado nella servlet Controller.java dove prendo il file, e lo salvo.Fin qui non ho trovato difficoltà. Il problema arriva ora.
Ho creato una tabella ListaFile composta da 2 colonne (UppatoDa, NomeFile), da usare per verificare se è presente un file con quello stesso nome.
Codice PHP:
Connection con = null;
String user = request.getParameter("user");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
try {
Class.forName("com.mysql.jdbc.Driver");
String connectionUrl = "jdbc:mysql://localhost/prova?" + "user=root&password=";
con = DriverManager.getConnection(connectionUrl);
Statement stmt = con.createStatement();
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while(itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if(!item.isFormField()) {
File fullFile = new File(item.getName());
File savedFile = new File(getServletContext().getRealPath("/"), fullFile.getName());
item.write(savedFile);
}
String nomeFile= item.getName();
ResultSet rs = stmt.executeQuery("Select * From listafile Where NomeFile= '"+nomeFile+"'");
rs.last();
int nRighe = rs.getRow();
if (nRighe==0){
stmt.executeUpdate("INSERT INTO listafile (UppatoDa,NomeFile) VALUES ('"+user+"','"+nomeFile+"' ) ");
}
else {
out.println("il file è gia presente");
}
}//fine while
out.println("File salvato ");
}catch (Exception e) {
out.println("errore: "+e.getMessage());
}
}
In questo modo, però ho dovuto mettere le istruzioni SQL nel while, e so che è sbagliato, ma se le metto dopo dal while, la verifica non ha senso perchè il file risulterà essere stato salvato. Avevo pensato di mettere le istruzioni SQL prima del while ma ho l'errore sulla riga
Codice PHP:
String nomeFile= item.getName();
(su item). La domanda è, come posso ottenere il nome del file che passo dalla form, prima che questo venga salvato?
In modo logico vorrei poter fare questo
Codice PHP:
Connection con = null;
String user = request.getParameter("user");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
try {
Class.forName("com.mysql.jdbc.Driver");
String connectionUrl = "jdbc:mysql://localhost/tesi?" + "user=root&password=";
con = DriverManager.getConnection(connectionUrl);
Statement stmt = con.createStatement();
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
String nomeFile= item.getName(); // qui c'è l'errore su item
ResultSet rs = stmt.executeQuery("Select * From listafile Where NomeFile= '"+nomeFile+"'");
rs.last();
int nRighe = rs.getRow();
if (nRighe==0){
while(itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if(!item.isFormField()) {
File fullFile = new File(item.getName());
File savedFile = new File(getServletContext().getRealPath("/"), fullFile.getName());
item.write(savedFile);
}
}
stmt.executeUpdate("INSERT INTO listafile (UppatoDa,NomeFile) VALUES ('"+user+"','"+nomeFile+"' ) ");
}
else {
out.println("il file è gia presente");
}
}catch (Exception e) {
out.println("errore: "+e.getMessage());
}
}