Fileupload varios arquivos

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=“java.io." %>
<%@ page import="java.util.
” %>
<%@ 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]

esse codigo funciona em JSP?

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

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

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

:wink:

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

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

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

:wink:

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

Salve,

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

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

Salve,

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

[code]
/*

  • Criado em 24/02/2005
  • Autor: 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 {

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;

}[/code]

:wink: :twisted:

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;&quot;text/html&quot;&#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; &quot;\\&quot; &#41;;
				
				nomeArquivo = nomeArquivo.substring&#40; nom + 1 &#41;;
				
				File file = new File&#40;&quot;C&#58;\\upload\\&quot; + nomeArquivo +&quot;&quot;&#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