Per effettuare l'upload di File via Web è molto utile utilizzare la libreria commons-fileupload-1.2.2.jar (per usarla c'è bisogno di avere nel classpath anche commons-io.jar.
Bisogna ricordarsi di scrivere dentro il tag Form ENCTYPE="multipart/form-data" altrimenti la chiamata al metodo isMultipartContent(request) torna false.
Ecco il form
<form name="caricaBilancio" id="caricaBilancio" ENCTYPE="multipart/form-data" action="CaricaBilancio" method="post">
<div class="contentResultCol" id="contentResultCol_M1472946676">
<div class="resultBodyObject" id="resultBodyObject_M1472946676">
<table class="filterTable">
<tr class="filterTr"><td>Acquisisci *: </td>
<td>
<select id="ddlScelta" name="ddlScelta" class="input">
<option value="B" selected="selected">Bilancio Azienda</option>
<option value="V">Votazione Azienda</option>
</select>
</td>
</tr>
<tr class="filterTr">
<td class="filterLabelTd" id="filterLabelTd_M994447656" valign="top">
<span id="FormModifica_dataCostituzione_label">File Excel *</span>
</td>
<td class="filterInputTd" valign="top"><!-- CalendarField#input -->
<span id="span_FormModifica_dataCostituzione"> <!-- FormField#boundedField -->
<span class="" alt="" title=""> <input id="fileExcel"
name="fileExcel" class="input" type="file" value="" size="100" width="100" title="FileExcel"/> </span> </span></td>
</tr>
</table>
<table class="buttonTable" align="left">
<tr>
<td><input class="inputButton" id="annulla" type="button" name="Annulla" title="Annulla" value="Annulla" onclick="javascript:self.close();"/></td>
<td><input class="inputButton" id="salva" type="button" name="btnInvio" value="Invia Richiesta" title="Invia Richiesta" onclick="javascript:validateForm() " /></td>
<td><input class="inputButton" id="reset" type="reset" name="Cancella" title="Cancella" value="Cancella" /></td>
<td><input class="inputButton" id="spiega" type="button" name="Guida" title="Guida" value="Mostra guida" onclick="javascript:showhide('spiegazioni')"/></td>
</tr>
</table>
</form>
Ecco il codice della Servlet che effettuare la lettura
RequestDispatcher rd=request.getRequestDispatcher("jsp/CaricaBilancio.jsp");
try
{
String valoreRichiesta="";
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items=upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
valoreRichiesta = item.getString();
} else {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
log.info(String.format("Upload di file %s di tipo %s e di size %d", fileName,contentType,sizeInBytes));
if("B".equals(valoreRichiesta)){
InputStream is=item.getInputStream();
ExcelCaricamentoDao ed=ExcelCaricamentoDaoImpl.getInstance();
BilancioExcel bil= ed.getBilancioFromExcel(is);
ed.persistBilancio(bil);
request.setAttribute("ok", "Inserimento del bilancio terminato correttamente");
}
else
{
InputStream is=item.getInputStream();
ExcelCaricamentoDao ed=ExcelCaricamentoDaoImpl.getInstance();
VotazioneExcel v=ed.getVotazioniFromExcel(is);
ed.persistVotazione(v);
request.setAttribute("ok", "Inserimento della votazione terminato correttamente");
}
}
}
}
}
catch(Exception fex){
String messaggio="";
if(fex instanceof SQLException){
if(fex.getMessage().startsWith("Duplicate entry"))
{
messaggio="Attenzione nel foglio caricato sono presenti dei dati che non rispettano i vincoli di univocità del database. " +
" Si consiglia di ricontrollare di aver rispettato tutte le regole di caricamento. <br> Dettaglio Messaggio:";
messaggio=messaggio+fex.getMessage();
}
else
{
messaggio="Attenzione si sono verificati dei problemi nell'inserimento dati sul db. <br>" +
"Si consiglia di ricontrollare di aver rispettato tutte le regole di caricamento. Dettaglio Messaggio: ";
messaggio=messaggio+fex.getMessage();
}
}
if(messaggio.equals(""))
{
messaggio=fex.getMessage();
}
request.setAttribute("error", messaggio);
}
finally{
rd.forward(request, response);
}
Per la lettura del file Excel è molto utile utilizzare Apache POI (vedi post precedenti).
Bisogna ricordarsi di scrivere dentro il tag Form ENCTYPE="multipart/form-data" altrimenti la chiamata al metodo isMultipartContent(request) torna false.
Ecco il form
<form name="caricaBilancio" id="caricaBilancio" ENCTYPE="multipart/form-data" action="CaricaBilancio" method="post">
<div class="contentResultCol" id="contentResultCol_M1472946676">
<div class="resultBodyObject" id="resultBodyObject_M1472946676">
<table class="filterTable">
<tr class="filterTr"><td>Acquisisci *: </td>
<td>
<select id="ddlScelta" name="ddlScelta" class="input">
<option value="B" selected="selected">Bilancio Azienda</option>
<option value="V">Votazione Azienda</option>
</select>
</td>
</tr>
<tr class="filterTr">
<td class="filterLabelTd" id="filterLabelTd_M994447656" valign="top">
<span id="FormModifica_dataCostituzione_label">File Excel *</span>
</td>
<td class="filterInputTd" valign="top"><!-- CalendarField#input -->
<span id="span_FormModifica_dataCostituzione"> <!-- FormField#boundedField -->
<span class="" alt="" title=""> <input id="fileExcel"
name="fileExcel" class="input" type="file" value="" size="100" width="100" title="FileExcel"/> </span> </span></td>
</tr>
</table>
<table class="buttonTable" align="left">
<tr>
<td><input class="inputButton" id="annulla" type="button" name="Annulla" title="Annulla" value="Annulla" onclick="javascript:self.close();"/></td>
<td><input class="inputButton" id="salva" type="button" name="btnInvio" value="Invia Richiesta" title="Invia Richiesta" onclick="javascript:validateForm() " /></td>
<td><input class="inputButton" id="reset" type="reset" name="Cancella" title="Cancella" value="Cancella" /></td>
<td><input class="inputButton" id="spiega" type="button" name="Guida" title="Guida" value="Mostra guida" onclick="javascript:showhide('spiegazioni')"/></td>
</tr>
</table>
</form>
Ecco il codice della Servlet che effettuare la lettura
RequestDispatcher rd=request.getRequestDispatcher("jsp/CaricaBilancio.jsp");
try
{
String valoreRichiesta="";
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items=upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
valoreRichiesta = item.getString();
} else {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
log.info(String.format("Upload di file %s di tipo %s e di size %d", fileName,contentType,sizeInBytes));
if("B".equals(valoreRichiesta)){
InputStream is=item.getInputStream();
ExcelCaricamentoDao ed=ExcelCaricamentoDaoImpl.getInstance();
BilancioExcel bil= ed.getBilancioFromExcel(is);
ed.persistBilancio(bil);
request.setAttribute("ok", "Inserimento del bilancio terminato correttamente");
}
else
{
InputStream is=item.getInputStream();
ExcelCaricamentoDao ed=ExcelCaricamentoDaoImpl.getInstance();
VotazioneExcel v=ed.getVotazioniFromExcel(is);
ed.persistVotazione(v);
request.setAttribute("ok", "Inserimento della votazione terminato correttamente");
}
}
}
}
}
catch(Exception fex){
String messaggio="";
if(fex instanceof SQLException){
if(fex.getMessage().startsWith("Duplicate entry"))
{
messaggio="Attenzione nel foglio caricato sono presenti dei dati che non rispettano i vincoli di univocità del database. " +
" Si consiglia di ricontrollare di aver rispettato tutte le regole di caricamento. <br> Dettaglio Messaggio:";
messaggio=messaggio+fex.getMessage();
}
else
{
messaggio="Attenzione si sono verificati dei problemi nell'inserimento dati sul db. <br>" +
"Si consiglia di ricontrollare di aver rispettato tutte le regole di caricamento. Dettaglio Messaggio: ";
messaggio=messaggio+fex.getMessage();
}
}
if(messaggio.equals(""))
{
messaggio=fex.getMessage();
}
request.setAttribute("error", messaggio);
}
finally{
rd.forward(request, response);
}
Per la lettura del file Excel è molto utile utilizzare Apache POI (vedi post precedenti).
Nessun commento:
Posta un commento