Upload de Arquivos

6 respostas
J

Olha só galera.. Estou fazendo upload de arquivos usando IO.. dae consegui de certa forma, certa forma porque na minha máquina eu consigo fazer o upload mas de outra máquina não.. ele diz que o sistema não pode encontrar o caminho especificado!
Ah... no meu caso eu não conseguir usar o FileUpload da Jakarta porque eu fiz uma tela estilo o anexar do gmail, dae ele guarda uma lista de arquivos... com isso não achei nada no FileUpload que me ajudasse nisso...porque ele procura por um campo do tipo file.. e no meu caso os arquivos virão de uma lista!
Segue o código:

Código: 
   public void salvaArquivo( HttpServletRequest request, HttpServletResponse response, String path ) 
    throws ServletException,IOException { 
        
        // Guarda a definição se é multipart ou não,isso vindo da requisição 
      //  boolean ehMultipart = FileUpload.isMultipartContent( request );        
        // Verifica se formulário é multipart 
        //if ( ehMultipart ) { 
            // A servlet.. serve pra fazer upload usando servlet. 
            // Esse Disk... diz como os arquivos serão tratados( armazenados ) 
            ServletFileUpload upload = new ServletFileUpload( new DiskFileItemFactory()); 

            String caminhoCompleto = request.getParameter("caminhoArquivoCompleto"); 
            String caminhoToken = ""; 
            List files = new ArrayList(); 
            while( caminhoCompleto.indexOf("[:]") != -1 ) { 
                caminhoToken = caminhoCompleto.substring(0, caminhoCompleto.indexOf("[:]")); 
                files.add(caminhoToken); 
                caminhoCompleto = caminhoCompleto.substring(caminhoCompleto.indexOf("[:]")+3); 
                ALDebug.print("--- "+caminhoToken); 
            } 
            
            // Como é uma lista, usa-se um for para manipular a lista 
            for ( int i = 0; i < files.size(); i++ ) { 
                ALDebug.print("--- Entrou "+files.size()); 
                
                // Para o servidor vai( dependendo da quantidade de arquivos ) um conjunto de arquivos( formulários e arquivos ), 
                //Então tem que verificar se é um arquivo ou dados do formulário. 
                // Se esse item tiver um nome, ele é um arquivo, se não, é um formulário 
                String nomeArquivo = ( String ) files.get(i); 

                try { 
                    // gravando com nome original, verifica a posição da última barra pra pegar o nome do arquivo 
                    // O + 1 é pra começar a pegar do nome do arquivo e não a barra 
                    if ( nomeArquivo.lastIndexOf( "\\" ) != -1 ) { 
                        nomeArquivo = nomeArquivo.substring( nomeArquivo.lastIndexOf( "\\" ) + 1 ); 
                    }              
                    // Cria o diretório caso ele não exista 
                    File diretorio = new File("C:\\Temp\\"); 
                    
                    if (!diretorio.exists()){ 
                        ALDebug.print(""); 
                        //diretorio.mkdir(); 
                    } 

                    File file = new File(diretorio, nomeArquivo); 
                    FileOutputStream output = new FileOutputStream(file); 
                    FileInputStream is = new FileInputStream(( String )files.get(i)); 

                    byte[] buffer = new byte[is.available()]; 
                    int nLidos; 

                    while ((nLidos = is.read(buffer)) >= 0) { 
                        output.write(buffer, 0, nLidos); 
                    } 

                    output.flush();                    
                    output.close(); 

              
                } catch( Exception e ) { 
                    throw new ServletException(e.getMessage() + " :: Erro: Página não pode ser acessada diretamente!" );      
                } 
            }

Ah.. e tem outra coisa que ocorreu quando tentei fazer o upload do arquivo de outra máquina na rede.. os ícones do dos programas que estão no desktop ele copia para a minha máquina!!

6 Respostas

zirocool

Sabe pq dá erro?
O erro dá pq nao consegue fazer o up…

Manda o código do teu form de envio tbm!

J

Olá amigo… como eu mencionei… eu fiz uma tela parecida com o anexar do gmail, sendo assim, eu não consigo utilizar o o nome do meu campo file para pegar o arquivo, porque no meu caso, eu posso ir adicionando varios arquivos
tipo assim>

[CAMPO FILE QUE JOGA NESSA LISTA AI EMBAIXO]
arquivo 1 [remover]
arquivo 2[remover]

SUBMIT

nessa lista é guardada o caminho completo do arquivo , ex: C:\Arquivos de Programas\meu_arquivo.doc, dae esse método que coloquei pegaria esses campos(caminho completo deles) e faria o up deles…
Na minha máquina quando testo da certo… ele encontra os arquivos e os coloca no diretório que defini, mas quando tento fazer o up de outra máquina ele diz que o caminho não pode ser encontrado…
Abraços!!

J

Bah… galera. ninguém?? Já vasculhei a net e não encontrei nada que me ajudasse!!
Abraço!

sublyer

Falae jovijesc, quando você executa fora da sua máquina ele recebe o endereço como um parâmetro e então entende que o caminho é o do servidor, aonde está sendo rodada a aplicação.

Por este motivo o arquivo não é encontrado.

Flwww

ddduran

Basicamente seu código funciona na sua maquina por que você está fazendo tudo menos um upload :stuck_out_tongue:

voce só faz isso aqui

ServletFileUpload upload = new ServletFileUpload( new DiskFileItemFactory());

outra coisa seu formulario tem que ser enctype=“multipart/form-data”

isso significa que você tambem não vai poder usar getParameter

te aconselho a dar uma lida direito la no site
http://commons.apache.org/fileupload/using.html

mas em todo caso ai vem ± como você deveria proceder (achei esse codigo num bau aqui :stuck_out_tongue: é de 2003)

if(ServletFileUpload.isMultipartContent(req)){
			FileItemFactory fac = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(fac);
			upload.setSizeMax(8 * 1024 * 1024); // 8 MB
			List items = null;
			try {
				items = upload.parseRequest(req);
			} catch(FileUploadException e) {
				e.printStackTrace();
			}
			Iterator it = items.iterator();
			while (it.hasNext()) {
				FileItem fitem = (FileItem) it.next();
				if(fitem.isFormField()){
					if(fitem.getFieldName().equals("meuInput"))
						String minhaVariavel = fitem.getString()); // pega os itens do formulario (parameter)
				}else{
					String fileName = fitem.getName();
					fileName = fileName.substring(fileName
							.lastIndexOf("\\") + 1);
					long tamanho = fitem.getSize();
					if (tamanho > 0) {
						String localizacao = "";
						/** Grava o arquivo */
						try {
							File f = new File(localizacao);
							if (!f.exists()) {									
								f.mkdirs();
							}
							localizacao += fileName;
							f = new File(localizacao);
							fitem.write(f);
							localizacao = "./arquivos/produtos/" + prodId + "/";
							localizacao += fileName;
							
						} catch (Exception ex) {
							ex.printStackTrace();
						}
					}
				}
			}
sublyer

Encontrei um artigo que me ajudou muito e acredito que seja a solução para seu problema.

http://www.jguru.com/faq/view.jsp?EID=160

Flwww

Ja implementei esse cara e funcionou muito bem viu.

Flwww

Criado 4 de setembro de 2007
Ultima resposta 2 de out. de 2007
Respostas 6
Participantes 4