Upload de arquivo

19 respostas
A

Galera to fazendo um upload de arquivo com struts e to usando a classe formFile deles. A questao eh, como faco para salvar este arquivo no meu disco? Eh uma duvida basica mas eu nao to conseguindo. Quem souber pode postar o exemplo aqui?

Grato,

Alberto

19 Respostas

M

Este exemplo usando commons-fileupload:

Formulário:

<html>
<head>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<meta http-equiv="Content-Type" content="multipart/form-data; charset=ISO-8859-1">
<title>Upload</title>
</head>
<body>
   <form method="post" action="recebe.jsp" enctype="multipart/form-data">
      arquivo <input type="file" name="arquivo">
      
      <input type="submit" value="envia"> 
  </form>
</body>
</html>

Grava

<%@page import="org.apache.commons.fileupload.*"%>
<%@page import="java.util.List"%>
<%@page import="java.io.File"%>
<%@page import="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>recebe arquivo</title>
</head>
<body>
recebe arquivo
<br>
<%
// 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("/anexos/"),fullFile.getName());
   		  item.write(savedFile);
   		  out.println("Enviado.");
		}
		else {
           out.println("Não enviado. Use apenas JPG");
		} 	
	}
}
%>
</body>
</html>
Jaison

Olá marceloplis, eu coloquei esse código pra rodar, mas quando seleciono um arquivo .JPG (como o código indica) e clico em enviar, da um erro:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 17 in the jsp file: /recebe.jsp

Generated servlet error:
    [javac] Compiling 1 source file

C:\Documents and Settings\Jaison\.netbeans.6\jakarta-tomcat-5.0.19_base\work\Catalina\localhost\WEB\org\apache\jsp\recebe_jsp.java:6: package org.apache.commons.fileupload does not exist
import org.apache.commons.fileupload.*;
^
C:\Documents and Settings\Jaison\.netbeans.6\jakarta-tomcat-5.0.19_base\work\Catalina\localhost\WEB\org\apache\jsp\recebe_jsp.java:64: cannot resolve symbol
symbol  : variable FileUpload 
location: class org.apache.jsp.recebe_jsp
 boolean isMultipart = FileUpload.isMultipartContent(request);
                       ^



An error occurred at line: 17 in the jsp file: /recebe.jsp

Generated servlet error:
C:\Documents and Settings\Jaison\.netbeans.6\jakarta-tomcat-5.0.19_base\work\Catalina\localhost\WEB\org\apache\jsp\recebe_jsp.java:66: cannot resolve symbol
symbol  : class DiskFileUpload 
location: class org.apache.jsp.recebe_jsp
 DiskFileUpload upload = new DiskFileUpload();
 ^



An error occurred at line: 17 in the jsp file: /recebe.jsp

Generated servlet error:
C:\Documents and Settings\Jaison\.netbeans.6\jakarta-tomcat-5.0.19_base\work\Catalina\localhost\WEB\org\apache\jsp\recebe_jsp.java:66: cannot resolve symbol
symbol  : class DiskFileUpload 
location: class org.apache.jsp.recebe_jsp
 DiskFileUpload upload = new DiskFileUpload();
                             ^



An error occurred at line: 17 in the jsp file: /recebe.jsp

Generated servlet error:
C:\Documents and Settings\Jaison\.netbeans.6\jakarta-tomcat-5.0.19_base\work\Catalina\localhost\WEB\org\apache\jsp\recebe_jsp.java:75: cannot resolve symbol
symbol  : class FileItem 
location: class org.apache.jsp.recebe_jsp
 	FileItem item = (FileItem) itr.next();
        ^



An error occurred at line: 17 in the jsp file: /recebe.jsp

Generated servlet error:
C:\Documents and Settings\Jaison\.netbeans.6\jakarta-tomcat-5.0.19_base\work\Catalina\localhost\WEB\org\apache\jsp\recebe_jsp.java:75: cannot resolve symbol
symbol  : class FileItem 
location: class org.apache.jsp.recebe_jsp
 	FileItem item = (FileItem) itr.next();
                         ^
6 errors

Pode me ajudar?

M

Você deve fazer download da biblioteca org.apache.commons.fileupload e jogar dentro do diretório lib da sua aplicação.

Teste e me avise qq coisa.

D

Olá, baixei o pacote, inseri os códigos, mais está me retornando o seguinte erro…

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org/apache/commons/io/output/DeferredFileOutputStream

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)

org.apache.jsp.upload_jsp._jspService(upload_jsp.java:108)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream

org.apache.commons.fileupload.DefaultFileItemFactory.createItem(DefaultFileItemFactory.java:102)

org.apache.commons.fileupload.FileUploadBase.createItem(FileUploadBase.java:500)

org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367)

org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:268)

org.apache.jsp.upload_jsp._jspService(upload_jsp.java:70)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.

M

Segue em anexo um exemplo, ai vc compara o que está de diferente, pois acho que este erro é na conversão do arquivo em anexo para byte.

J

Olá marceloplis, sou novo em java e estou com o mesmo problema que nosso amigo darroite. Já baixei o exemplo que vc disponibilizou e o erro continua.

O problema esta na linha:
Iterator itr = items.iterator();

Se vc puder me ajudar!
Agradeço a atenção!

M

jlunge:
Olá marceloplis, sou novo em java e estou com o mesmo problema que nosso amigo darroite. Já baixei o exemplo que vc disponibilizou e o erro continua.

O problema esta na linha:
Iterator itr = items.iterator();

Se vc puder me ajudar!
Agradeço a atenção!

Qual é o erro que dá ?? por favor, poste aqui !!!

J

O erro é esse …

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org/apache/commons/io/output/DeferredFileOutputStream

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)

org.apache.jsp.upload_jsp._jspService(upload_jsp.java:107)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream

org.apache.commons.fileupload.DefaultFileItemFactory.createItem(DefaultFileItemFactory.java:102)

org.apache.commons.fileupload.FileUploadBase.createItem(FileUploadBase.java:500)

org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367)

org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:268)

org.apache.jsp.upload_jsp._jspService(upload_jsp.java:66)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.

Obrigado!

J

O erro é esse …

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org/apache/commons/io/output/DeferredFileOutputStream

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)

org.apache.jsp.upload_jsp._jspService(upload_jsp.java:107)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream

org.apache.commons.fileupload.DefaultFileItemFactory.createItem(DefaultFileItemFactory.java:102)

org.apache.commons.fileupload.FileUploadBase.createItem(FileUploadBase.java:500)

org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367)

org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:268)

org.apache.jsp.upload_jsp._jspService(upload_jsp.java:66)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.

Obrigado!

J

O erro é esse …

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org/apache/commons/io/output/DeferredFileOutputStream

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)

org.apache.jsp.upload_jsp._jspService(upload_jsp.java:107)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream

org.apache.commons.fileupload.DefaultFileItemFactory.createItem(DefaultFileItemFactory.java:102)

org.apache.commons.fileupload.FileUploadBase.createItem(FileUploadBase.java:500)

org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367)

org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:268)

org.apache.jsp.upload_jsp._jspService(upload_jsp.java:66)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.

Obrigado!

J

Descupa, atualizei a tela e a msg foi enviada novamente! :frowning:

M

Desculpe-me. mas preciso ser sincero. não faço a menor idéia de que erro é esse !!!

Não tem alguém que saiba que erro é esse pra ajudar nosso amigo ???

Valew galera !!!

E

Envia o projeto da dar uma olhada. O projeto inteiro.

M

O anexo anterior já é o projeto_exemplo inteiro, mas por desencargo de consciencia estou anexando novamente.

E

A noite em casa eu vejo e te respondo. blz

J

Taí um exemplo que lê da base o conteúdo de um campo LONG_RAW (Oracle) e gera um arquivo .JPG que representa a figura salva anteriormente.

Object objImage = <campo LONG_RAW da base que contém a figura>;
if (objImage != null) {            	                      
  byte[] arrayImage = (byte[])objImage;	                     
  String pathTmp = "\img\tmp";        
  String fileName = pathTmp + "\<aplicacao>" +     System.currentTimeMillis() + ".jpg";
  String path = request.getSession().getServletContext().getRealPath("<um diretório acima do de imagens>");
  File dir = new File(path + pathTmp);
    if (!dir.exists()) {
    dir.mkdir();
  } 
  OutputStream bos = new FileOutputStream(path +   fileName);                                
  bos.write(stream, 0, stream.length);
  bos.close();    
}
E

Isso ai Juliano.

Vamos, mostra o que voce sabe.

K

Vcs estão utilozando o código do marceloplis ?? caso não… post o cod de vcs para avaliar! eu uso em Struts e tudo funciona normal aki…

abraços

R

Provavelmente vc6 devem estar usando a última versão do commons file upload, a 1.2 (commons-fileupload-1.2)

Ele necessita de outro package, o commons-io-1.2.

Baixa, coloca na lib esses 2 Jars e restarta a aplicação.

Abs,

Rameee

Criado 20 de abril de 2006
Ultima resposta 27 de jan. de 2008
Respostas 19
Participantes 9