JSP - Upload de Arquivo
Neste capítulo, discutiremos o upload de arquivos em JSP. Um JSP pode ser usado com uma tag de formulário HTML para permitir que os usuários carreguem arquivos no servidor. Um arquivo carregado pode ser um arquivo de texto ou binário ou um arquivo de imagem ou apenas qualquer documento.
Criação de um formulário de upload de arquivo
Vamos agora entender como criar um formulário de upload de arquivo. O código HTML a seguir cria um formulário de upload. A seguir estão os pontos importantes a serem anotados -
A forma method atributo deve ser definido como POST método e método GET não podem ser usados.
A forma enctype atributo deve ser definido como multipart/form-data.
A forma actionatributo deve ser definido como um arquivo JSP que manipularia o upload de arquivos no servidor backend. O exemplo a seguir está usandouploadFile.jsp arquivo de programa para carregar o arquivo.
Para fazer upload de um único arquivo, você deve usar um único <input .../> tag com atributo type = "file". Para permitir o upload de vários arquivos, inclua mais de uma tag de entrada com valores diferentes para o atributo name. O navegador associa um botão Procurar a cada um deles.
<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>
Isso exibirá o seguinte resultado. Agora você pode selecionar um arquivo do PC local e quando o usuário clicar em "Carregar Arquivo", o formulário será enviado junto com o arquivo selecionado -
File Upload −
Select a file to upload −
NOTE - O formulário acima é apenas um formulário fictício e não funcionaria, você deve tentar o código acima em sua máquina para fazê-lo funcionar.
Escrevendo Script Backend JSP
Vamos agora definir um local onde os arquivos carregados serão armazenados. Você pode codificar isso em seu programa ou este nome de diretório também pode ser adicionado usando uma configuração externa, como umcontext-param elemento em web.xml da seguinte forma -
<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>
A seguir está o código-fonte para UploadFile.jsp. Isso pode lidar com o upload de vários arquivos de uma vez. Vamos agora considerar o seguinte antes de prosseguir com o upload de arquivos.
O exemplo a seguir depende de FileUpload; certifique-se de ter a versão mais recente docommons-fileupload.x.x.jararquivo em seu classpath. Você pode baixá-lo dehttps://commons.apache.org/fileupload/.
FileUpload depende do Commons IO; certifique-se de ter a versão mais recente docommons-io-x.x.jararquivo em seu classpath. Você pode baixá-lo dehttps://commons.apache.org/io/.
Ao testar o exemplo a seguir, você deve fazer upload de um arquivo que seja menor que maxFileSize, caso contrário, o arquivo não será carregado.
Certifique-se de ter criado diretórios c:\temp e c:\apache-tomcat5.5.29\webapps\data com bastante antecedência.
<%@ 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>");
}
%>
Agora tente fazer upload de arquivos usando o formulário HTML que você criou acima. Quando você tentahttp://localhost:8080/UploadFile.htm, ele exibirá o seguinte resultado. Isso o ajudará a carregar qualquer arquivo de sua máquina local.
File Upload −
Select a file to upload −
Se o seu script JSP funcionar bem, seu arquivo deve ser carregado em c:\apache-tomcat5.5.29\webapps\data\ diretório.