JSP - Caricamento file
In questo capitolo, discuteremo del caricamento di file in JSP. Un JSP può essere utilizzato con un tag modulo HTML per consentire agli utenti di caricare file sul server. Un file caricato può essere un file di testo o un file binario o di immagine o semplicemente un documento qualsiasi.
Creazione di un modulo di caricamento file
Vediamo ora come creare un modulo di caricamento file. Il seguente codice HTML crea un modulo di caricamento. Di seguito sono riportati i punti importanti da annotare:
Il modulo method l'attributo dovrebbe essere impostato su POST il metodo e il metodo GET non possono essere utilizzati.
Il modulo enctype l'attributo dovrebbe essere impostato su multipart/form-data.
Il modulo actionl'attributo deve essere impostato su un file JSP che gestisca il caricamento del file sul server di backend. L'esempio seguente sta usandouploadFile.jsp file di programma per caricare il file.
Per caricare un singolo file dovresti usare un singolo file <input .../> tag con attributo type = "file". Per consentire il caricamento di più file, includi più di un tag di input con valori diversi per l'attributo name. Il browser associa un pulsante Sfoglia a ciascuno di essi.
<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br />
<form action = "UploadServlet" method = "post"
enctype = "multipart/form-data">
<input type = "file" name = "file" size = "50" />
<br />
<input type = "submit" value = "Upload File" />
</form>
</body>
</html>
Questo mostrerà il seguente risultato. È ora possibile selezionare un file dal PC locale e quando l'utente fa clic su "Carica file", il modulo viene inviato insieme al file selezionato -
File Upload −
Select a file to upload −
NOTE - Il modulo sopra è solo un modulo fittizio e non funzionerebbe, dovresti provare il codice sopra sulla tua macchina per farlo funzionare.
Scrittura di script JSP di backend
Definiamo ora una posizione in cui verranno archiviati i file caricati. È possibile codificarlo nel programma oppure aggiungere il nome della directory utilizzando una configurazione esterna come un filecontext-param elemento in web.xml come segue:
<web-app>
....
<context-param>
<description>Location to store uploaded file</description>
<param-name>file-upload</param-name>
<param-value>
c:\apache-tomcat-5.5.29\webapps\data\
</param-value>
</context-param>
....
</web-app>
Di seguito è riportato il codice sorgente per UploadFile.jsp. Questo può gestire il caricamento di più file alla volta. Consideriamo ora quanto segue prima di procedere con il caricamento dei file.
Il seguente esempio dipende da FileUpload; assicurati di avere l'ultima versione dicommons-fileupload.x.x.jarfile nel tuo classpath. Puoi scaricarlo dahttps://commons.apache.org/fileupload/.
FileUpload dipende da Commons IO; assicurati di avere l'ultima versione dicommons-io-x.x.jarfile nel tuo classpath. Puoi scaricarlo dahttps://commons.apache.org/io/.
Durante il test del seguente esempio, è necessario caricare un file di dimensioni inferiori a maxFileSize altrimenti il file non verrà caricato.
Assicurati di aver creato le directory c:\temp e c:\apache-tomcat5.5.29\webapps\data largo anticipo.
<%@ page import = "java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import = "javax.servlet.http.*" %>
<%@ page import = "org.apache.commons.fileupload.*" %>
<%@ page import = "org.apache.commons.fileupload.disk.*" %>
<%@ page import = "org.apache.commons.fileupload.servlet.*" %>
<%@ page import = "org.apache.commons.io.output.*" %>
<%
File file ;
int maxFileSize = 5000 * 1024;
int maxMemSize = 5000 * 1024;
ServletContext context = pageContext.getServletContext();
String filePath = context.getInitParameter("file-upload");
// Verify the content type
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") >= 0)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:\\temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try {
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>JSP File upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () ) {
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () ) {
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ) {
file = new File( filePath +
fileName.substring( fileName.lastIndexOf("\\"))) ;
} else {
file = new File( filePath +
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
out.println("Uploaded Filename: " + filePath +
fileName + "<br>");
}
}
out.println("</body>");
out.println("</html>");
} catch(Exception ex) {
System.out.println(ex);
}
} else {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
}
%>
Ora prova a caricare i file utilizzando il modulo HTML che hai creato sopra. Quando ci provihttp://localhost:8080/UploadFile.htm, visualizzerà il seguente risultato. Questo ti aiuterà a caricare qualsiasi file dalla tua macchina locale.
File Upload −
Select a file to upload −
Se il tuo script JSP funziona correttamente, il tuo file dovrebbe essere caricato in formato c:\apache-tomcat5.5.29\webapps\data\ directory.