pessoal estou tentando fazer um upload usando a commons.fileupload da jakarta peguei um código aqui do guj mesmo mas esta me retornando um erro:
upload.jsp
<%@ page import="org.apache.commons.fileupload.*, java.util.List, java.io.File, java.util.Iterator" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
</head>
<body>
<%
// first check if the upload request coming in is a multipart request
boolean isMultipart = FileUpload.isMultipartContent(request);
DiskFileUpload upload = new DiskFileUpload();
upload.setSizeMax(1024*1024*3); // 3 Mb
// parse this request by the handler
// this gives us a list of items from the request
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while(itr.hasNext()) {
FileItem item = (FileItem) itr.next();
// check if the current item not is a form field or an uploaded file
if(!item.isFormField()) {
// the item must be an uploaded file save it to disk. Note that there
// seems to be a bug in item.getName() as it returns the full path on
// the client's machine for the uploaded file name, instead of the file
// name only. To overcome that, I have used a workaround using
// fullFile.getName().
File fullFile = new File(item.getName());
String nome = fullFile.getName();//pega o nome do arquivo
String extensao=nome.substring(nome.length()-3,nome.length());//pega a estenção do arquivo
out.println(nome+"<br>");
out.println(extensao+"<br>");
if (extensao.equalsIgnoreCase("JPG")) {//só envia se for JPG
File savedFile = new File(getServletContext().getRealPath("/ola/"),fullFile.getName());
item.write(savedFile);
}
else {
out.println("Não enviando. Use apenas JPG");
}
}
}
%>
</body>
</html>
mas esta me dando o seguinte erro:
org.apache.jasper.JasperException: An exception occurred processing JSP page /administrativo/cad_banners/upload.jsp at line 22
19: upload.setSizeMax(1024*1024*3); // 3 Mb
20: // parse this request by the handler
21: // this gives us a list of items from the request
22: List items = upload.parseRequest(request);
23:
24: Iterator itr = items.iterator();
25:
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
se alguem puder me ajudar!
Ao invés de usar DiskFileUpload utilize ServletFileUpload
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
factory.setSizeThreshold(1);
// Create Temp Repository
File fileTemp = new File("C:\\Temp");
factory.setRepository(fileTemp);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint in bytes
upload.setSizeMax(4000000);
// Parse the request
Tenho que baixar alguma outra lib pois esta me dando esse erro:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 10 in the jsp file: /administrativo/cad_banners/upload.jsp
DiskFileItemFactory cannot be resolved to a type
7: boolean isMultipart = FileUpload.isMultipartContent(request);
8: if (isMultipart) {
9: // Create a new file upload handler
10: DiskFileItemFactory factory = new DiskFileItemFactory();
11: upload.setSizeThreshold(1);
12: File fileTemp = new File("C:\\Temp");
13:
An error occurred at line: 10 in the jsp file: /administrativo/cad_banners/upload.jsp
DiskFileItemFactory cannot be resolved to a type
7: boolean isMultipart = FileUpload.isMultipartContent(request);
8: if (isMultipart) {
9: // Create a new file upload handler
10: DiskFileItemFactory factory = new DiskFileItemFactory();
11: upload.setSizeThreshold(1);
12: File fileTemp = new File("C:\\Temp");
13:
An error occurred at line: 11 in the jsp file: /administrativo/cad_banners/upload.jsp
upload cannot be resolved
8: if (isMultipart) {
9: // Create a new file upload handler
10: DiskFileItemFactory factory = new DiskFileItemFactory();
11: upload.setSizeThreshold(1);
12: File fileTemp = new File("C:\\Temp");
13:
14: // Set upload parameters
An error occurred at line: 18 in the jsp file: /administrativo/cad_banners/upload.jsp
ServletFileUpload cannot be resolved to a type
15: factory.setSizeMax(50*1024*1024); //50Mb
16: factory.setRepositoryPath("c:/temp");
17: factory.setRepository(fileTemp);
18: ServletFileUpload upload = new ServletFileUpload(factory);
19: upload.setSizeMax(4000000);
20: // Parse the request
21: //List items = upload.parseRequest(request);
An error occurred at line: 18 in the jsp file: /administrativo/cad_banners/upload.jsp
ServletFileUpload cannot be resolved to a type
15: factory.setSizeMax(50*1024*1024); //50Mb
16: factory.setRepositoryPath("c:/temp");
17: factory.setRepository(fileTemp);
18: ServletFileUpload upload = new ServletFileUpload(factory);
19: upload.setSizeMax(4000000);
20: // Parse the request
21: //List items = upload.parseRequest(request);
A biblioteca commons-fileupload esta no seu WEB-INF/lib?
sim e as classes estao todas la…
estou importando assim: org.apache.commons.fileupload.*
Estou levantando esse post para não abrir outro com o mesmo assunto e porque ainda não foi respondido.
Estou com o mesmo problema do amigo acima.
O erro é manifestado pela linha “List items = upload.parseRequest(request);”
O erro no apache:
exception
javax.servlet.ServletException: Servlet execution threw an exception
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause
java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:196)
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:358)
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
servlets.ServletUpload.doGet(ServletUpload.java:69)
servlets.ServletUpload.doPost(ServletUpload.java:54)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause
java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:196)
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:358)
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
servlets.ServletUpload.doGet(ServletUpload.java:69)
servlets.ServletUpload.doPost(ServletUpload.java:54)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
Ola, vc precisa da lib commons-io
http://commons.apache.org/io/
Ramilani12, meu garoto, quer uma massagem no ego?
Você é o melhor!!!
Valeu, resposta curta; resultado imediato.
Por mim, tá dado como resolvido.
Antes que alguém me peça, lá vai o código:
package servlets;
import com.mysql.jdbc.Blob;
import java.sql.*;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.ImageIcon;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
public class ServletUpload extends HttpServlet {
Connection conexao = null;
public void init() throws ServletException {
doConnect();
}
public void doConnect(){
String enderecoDB = "jdbc:mysql://localhost:3306/blueshooter";
try {
Class.forName("com.mysql.jdbc.Driver");
conexao = (Connection) DriverManager.getConnection(enderecoDB,"root","1");
} catch (ClassNotFoundException ex) {
Logger.getLogger(ServletUpload.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(ServletUpload.class.getName()).log(Level.SEVERE, null, ex);
}
}
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean isMultiPart = FileUpload.isMultipartContent(request); //<-Deprecated, mas funciona.
if (isMultiPart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
String formulario = "";
try {
//O ERRO ERA AQUI!!!
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.getFieldName().equals("tipoForm")) {
formulario = item.getString();
}
if (!item.isFormField()) {
if (item.getName().length() > 0) {
this.inserirImagem(item);
}
}
}
}catch (FileUploadException ex) {
System.out.println(ex);
ex.printStackTrace();
}catch (Exception ex) {
System.out.println(ex);
ex.printStackTrace();
}
}
}
/**
* @param item FileItem, representa um arquivo que é enviado pelo formulario
* MultiPart/Form-data
* @throws IOException
* @throws ServletException
*/
private void inserirImagem(FileItem item) {
PreparedStatement declaracao = null;
//bImagem é um campo LONGBLOB.
String sql = "INSERT INTO midia (iId,sDescricao, bImagem) VALUES(null,?, ?)";
try {
//declaracao = conexao.prepareStatement(sql);
declaracao = (PreparedStatement) conexao.prepareStatement(sql);
declaracao.setString(1, "imagem.bmp"); //descrição
declaracao.setBinaryStream(2, item.getInputStream(), (int) item.getSize() );
declaracao.executeUpdate();
} catch (SQLException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public ImageIcon recuperaImagem() {
Statement declaracao = null;
ResultSet resultado = null;
StringBuffer sql = new StringBuffer();
sql.append("SELECT imagem FROM midia WHERE iId = 1");
ImageIcon imagem = null;
try {
declaracao = conexao.createStatement();
resultado = declaracao.executeQuery(sql.toString());
if (resultado.next()) {
Blob blob = (Blob) resultado.getBlob("bImagem");
if (blob!=null){
imagem = new ImageIcon(blob.getBytes(1,(int) blob.length()));
}
}
} catch (SQLException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
return imagem;
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
}
}