Fileupload varios arquivos

12 respostas
T

Galera estou com o seguinte codigo para o filuupload para renomear, pegar a extensao e mandar um arquivo…
mais se eu tiver varios campos de formulario de arquivo, para mandar tipo 5 arquivos de uma vez??

Segue o codigo para um:

[color=“red”]<%@ page import=<a href="http://java.io">java.io</a>.<em>" %>

<%@ page import="java.util.</em>” %>

<%@ page import=org.apache.commons.fileupload.* %>
<%

String novonome = “”;

try {

DiskFileUpload fu = new DiskFileUpload();

List fileItems = fu.parseRequest(request);

Iterator i = fileItems.iterator();

FileItem fi = (FileItem)i.next();

InputStream in = fi.getInputStream();

// configura o tipo do arquivo para gerar um nome unico…

int tamanho = fi.getName().length();

// configura pra pegar o nome do arquivo

int de = tamanho -4;

//pega o tipo do arquivo

String tipo_arquivo = fi.getName().substring(de,tamanho);
//gera o novo nome como uid

//gerar codigo de controle - inicio

int x = (int)(Math.random()*70000);

String codigo="";

for (int j=0;j<9;j++){

while (x<4096 || x>65535)

{

x = (int)(Math.random()*70000);
}
						codigo = codigo + Integer.toString(x,16) +"-";
						x = (int)(Math.random()*70000);
				}
				codigo = codigo.substring(0,19).toUpperCase();

// configura o novo nome
novonome = codigo+tipo_arquivo;

// se o tipo do arquivo for pdf,zip ou jpg salva

if(tipo_arquivo.equals(".pdf")||tipo_arquivo.equals(".zip")||tipo_arquivo.equals(".jpg")){

File file = new File(C:\arq\+novonome+"");

FileOutputStream fos = new FileOutputStream(file);

int c;

while((c = in.read()) != -1)

fos.write©;
fos.close();

out.println(novonome);

}

}

catch(Exception e) {

out.println(e.toString());

}

%>[/color]

12 Respostas

S

esse codigo funciona em JSP?

T

claro, testei ele heim jsp e bean, funciona perfeitamente…
pode testar…

S

po loco deu erro aki!!!

olha so!!

Note: sun.tools.javac.Main has been deprecated.
/~shadow/oi.jsp:13: Package org.apache.commons.fileupload not found in
import.
import org.apache.commons.fileupload.*;
^
1 error, 1 warning

G

provavelmente vc não está com o commons.fileupload no classpath…

:wink:

T

caraca o negocio mudou de figura…
certo que seria pra sanar a minha duvida…

mais mudou de figura…
batendo na mesma tecla…
como faço usando o codigo que passa todos os request…
ou seja varios form file…
e incluir todos , por exemplo 5

S

como assim sem o commons.fileupload no classpath…???/

G

vc precisa ter a biblioteca commons.fileupload para rodar o código acima!

:wink:

T

jogue o arquivo fileupload.jar no diretorio tomcat/commom/lib

jogue os arquivos do Fileupload que esta na pasta src/java/ apartir do org
na pasta do seu jre ai ira compilar os beans… e fizer em jsp nao precisa…
o tomcat ja tem o fileupload.jar

M

Salve,

tem um tutorial da prória Apache dê uma olhada http://jakarta.apache.org/commons/fileupload/using.html

T

E ja vi que vou ter que me virar sozinho em enviar varios arquivos de uma vez só…

M

Salve,

tenho uma classe que faz o serviço independente do commons da Apache, ela faz n uploads, só tem que melhorar!!!!

/*
 * Criado em 24/02/2005
 *
 * Autor&#58; Marcos Sousa
 */

package br.edu.unipam.ned.servlets;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.RandomAccessFile;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Upload extends HttpServlet &#123;

	protected void doGet&#40;HttpServletRequest request,
			HttpServletResponse response&#41; throws ServletException, IOException &#123;
		doPost&#40; request, response &#41;;
	&#125;

	protected void doPost&#40;HttpServletRequest request,
			HttpServletResponse response&#41; throws ServletException, IOException &#123;
		  // define diretório onde será salvo
		  String diretorioDestino = &quot;C&#58;\\upload\\&quot;;

		  String nomeArquivo = &quot;&quot;;

		  ServletInputStream in = request.getInputStream&#40;&#41;;

		  byte&#91;&#93; linha = new byte&#91;128&#93;;
		  int i = in.readLine&#40;linha, 0, 128&#41;;
		  int limitador = i - 2;
		  String limite = new String&#40;linha, 0, limitador&#41;; 
		  //discarta os dois últimos caracteres&#58; carro de retorno

		  while &#40;i != -1&#41; &#123;
		    String linhaNova = new String&#40;linha, 0, i&#41;;
		    if &#40;linhaNova.startsWith&#40;&quot;Content-Disposition&#58; form-data; name=\&quot;&quot;&#41;&#41; &#123;
		      String nomeCampo = linhaNova.substring&#40;38, linhaNova.length&#40;&#41; - 1 &#41;;
		      String s = new String&#40;linha, 0, i-2&#41;;
		      int pos = s.indexOf&#40;&quot;filename=\&quot;&quot;&#41;;
		      if &#40;pos != -1&#41; &#123;
		        String caminho = s.substring&#40;pos+10, s.length&#40;&#41;-1&#41;;
		        // Testa se o arquivo é oriundo de um navegador windows
		        pos = caminho.lastIndexOf&#40;&quot;\\&quot;&#41;;
		        if &#40;pos != -1&#41;
		          nomeArquivo = caminho.substring&#40;pos + 1&#41;;
		        else
		          nomeArquivo = caminho; // Linux inclui apenas nomeArquivo
		      &#125;

		      //lê conteúdo do arquivo
		      i = in.readLine&#40;linha, 0, 128&#41;;
		      i = in.readLine&#40;linha, 0, 128&#41;;
		      // linha carro de retorno
		      i = in.readLine&#40;linha, 0, 128&#41;;
		      //armazena o arquivo em buffer
		      ByteArrayOutputStream buffer = new ByteArrayOutputStream&#40;&#41;;
		      linhaNova = new String&#40;linha, 0, i&#41;;

		      while &#40;i != -1 && !linhaNova.startsWith&#40;limite&#41;&#41; &#123;
		        // há um problema na última linha do conteúdo do arquivo
		        // uma outra nova linha.
		        // aqui checamos se a linha atua é a última linha
		        buffer.write&#40;linha, 0, i&#41;;
		        i = in.readLine&#40;linha, 0, 128&#41;;
		        linhaNova = new String&#40;linha, 0, i&#41;;
		      &#125;
		      try &#123;
		        // salva o arquivo
		        RandomAccessFile arq = new RandomAccessFile&#40;
		          diretorioDestino + nomeArquivo, &quot;rw&quot;&#41;;
		        byte&#91;&#93; bytes = buffer.toByteArray&#40;&#41;;
		        arq.write&#40;bytes, 0, bytes.length - 2&#41;;
		        arq.close&#40;&#41;;
		      &#125;
		      catch &#40;Exception e&#41; &#123;&#125;
		    &#125; 
		    i = in.readLine&#40;linha, 0, 128&#41;;

		  &#125; // fim da estrutura while		  
	&#125;
&#125;

:wink: :twisted:

M

Salve,

cara, sou “bonzinho” quem me dera, mas tirei umas duas horinha aki fiz seu código fazer uploads de múltiplos arquivos, quantos tiver em seu formulário:

/*
 * Criado em 24/02/2005
 *
 * Autor&#58; Marcos Sousa
 */

package br.edu.unipam.ned.servlets;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;


public class Upload extends HttpServlet &#123;
	
	protected void doGet&#40;HttpServletRequest request,
			HttpServletResponse response&#41; throws ServletException, IOException &#123;
		doPost&#40; request, response &#41;;
	&#125;
	
	protected void doPost&#40;HttpServletRequest request,
			HttpServletResponse response&#41; throws ServletException, IOException &#123;
		
		response.setContentType&#40;"text/html"&#41;;
		
		PrintWriter out = response.getWriter&#40;&#41;;
		try &#123; 
			DiskFileUpload fu = new DiskFileUpload&#40;&#41;; 
			
			List fileItems = fu.parseRequest&#40;request&#41;; 
			
			Iterator i = fileItems.iterator&#40;&#41;; 
			
			while &#40; i.hasNext&#40;&#41; &#41;
			&#123;
				FileItem fi = &#40;FileItem&#41;i.next&#40;&#41;; 
				
				InputStream in = fi.getInputStream&#40;&#41;; 
				
				String nomeArquivo = fi.getName&#40;&#41;;
				int nom = nomeArquivo.lastIndexOf&#40; "\\" &#41;;
				
				nomeArquivo = nomeArquivo.substring&#40; nom + 1 &#41;;
				
				File file = new File&#40;"C&#58;\\upload\\" + nomeArquivo +""&#41;; 
				
				FileOutputStream fos = new FileOutputStream&#40;file&#41;; 
				
				int c; 
				while&#40;&#40;c = in.read&#40;&#41;&#41; != -1&#41; 
					fos.write&#40;c&#41;; 
				
				fos.close&#40;&#41;; 
				out.println&#40; nomeArquivo &#41;; 
			&#125; 
		&#125;
		catch&#40;Exception e&#41; &#123; 
			out.println&#40;e.toString&#40;&#41;&#41;; 
		&#125;
	&#125;
&#125;

ficou melhor argora

Criado 11 de fevereiro de 2005
Ultima resposta 26 de fev. de 2005
Respostas 12
Participantes 4