Partiamo dalle poche istruzioni da inserire nella pagina HTML/JSP:
<form method="post" action="/uploadFile" enctype="multipart/form-data">
File
<input type="file" name="upfile"/>
<input type="submit"/>
Prima di procedere al codice che gestisce la richiesta HTTP-POST lato server è necessario importare nel progetto la libreria Apache commons-fileupload, direttamente dipendente dalla libreria Apache commons.
Il codice
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.tomcat.util.http.fileupload.*;
public class resourceAddServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
//uploading file
DiskFileUpload uploader = new DiskFileUpload();
uploader.setSizeMax(1000000000);
uploader.setSizeThreshold(4096);
uploader.setRepositoryPath("C:\\TEMP\\");
//parsing the request
java.util.List files = uploader.parseRequest(request);
//prepare the output directory
String destination = "C:\\MYSERVER\\";
//obtaining the file
FileItem fileitem = ((FileItem) files.get(0));
String res = retrieveFilename(fileitem.getName());
//writing file to disk
fileitem.write(new java.io.File(destination + res));
} catch (Exception ex) {
ex.printStackTrace();
} finally {
out.close();
}
}
private String retrieveFilename(String path) {
path = path.replaceAll("\\\\", "/");
char symbol;
String toret = "";
for (int i = (path.length() - 1); i >= 0; i--) {
symbol = path.charAt(i);
if (symbol == '/') {
break;
} else {
toret = symbol + toret;
}
}
return toret;
}
}
Tramite uploader.setSizeMax e uploader.setSizeThreshold è possibile limitare la dimensione dei file caricati. Consiglio anche di effettuare un controllo dell'esistenza di un file con lo stesso nome prima di sovrascrivere.
Nessun commento:
Posta un commento