Imagem no servidor! ME AJUDEMMM

31 respostas
A

ae pessoal eu tenho uma aplicação vraptor e em uma tela de cadastro eu passo o caminho da imagem(caminho no pc do cliente) e eu preciso pegar essa imagem e salvar em uma pasta no servidor!!! como eu faço isso?!?! alguem tem soh algum exemplo para eu poder começar?!?!

31 Respostas

A

NGM???

finotti

http://jakarta.apache.org/commons/fileupload/

Pedrosa

Olha o exemplo que tem no site do VRaptor funciona perfeitamente:
http://www.vraptor.org/file-upload.html

Porém o tamanho dos arquivos estão limitados a 2 MB.

Inclua essas libs no classpath:

commons-fileupload-1.2.jar
commons-io-1.3.1.jar
A

eu nao consigi entender mtu bem a documentação ngm teeria um exemplo?

A

Pedrosa:
Olha o exemplo que tem no site do VRaptor funciona perfeitamente:
http://www.vraptor.org/file-upload.html

Porém o tamanho dos arquivos estão limitados a 2 MB.

Inclua essas libs no classpath:

commons-fileupload-1.2.jar
commons-io-1.3.1.jar

vlw cara vou dar uma olhada e retorno qualquer coisa

A

ae cara eu consegui!! esta funcionando!! porem ele esta mandando a foto para este caminho com este nome esquisito:

temp\raptor.28859.upload

como eu faço para mudar caminho … nome!!! essas coisas!!!

e como eu publico essa imagem?!?! pois ela nun teria que estar dentro do meu .war!! e agora?!?! como vou chamar ela da minha jsp???

A

NGM:::???

A

???tah foda ak… alguem pdia ajuda neh!!!

fsquadro

Arthur,

Por favor não fique “UPando” o tópico, as suas dúvidas são tão importantes quanto as outras. Tenha paciência, se alguém souber, irá te ajudar.

A

fmz maus cara… eh q eu sempre respondo a maioria das duvidas… e nunk respondem as minhas cara!!!

Luiz_Aguiar

arthurnn:
fmz maus cara… eh q eu sempre respondo a maioria das duvidas… e nunk respondem as minhas cara!!!
Tente minimizar isso procurando informações nas documentação (que é muito completa) e no google tbm, se/qdo alguém souber, vai te ajudar, não precisa “floodar” o tópico.

valeu!

Pedrosa

Conseguiu?, depois da classe que te passei.

A

consegi mais ou menos… eu consegi fazer o upload da minha foto para a pasta ‘C:\Java\apache-tomcat-5.5.17\arthur’ porem como eu acesso a imagem da minha pagina??? pois eu soh posso acessar imagens q estao dentro da aplicação(deploy) o certo seria eu passar as fotos para o deploy!!! como eu faço isso cara!!!

Pedrosa

Grave onde a sua aplicação leia corretamente, qual a dificuldade?

A

no cliente isso irá funcionar?!?!

A

cara eu nao consigo acessar a imagem eu preciso acessar ela assim

http://localhost:8080/loja/img/imagem.jpg

mais para onde eu joga ela… para eu poder acessar ela assim via internet??

Pedrosa

Você grava no servidor caso tenha acesso, sim pode acessar daquele jeito, na classe Interceptada como está gravando o arquivo?

A

File dirc = new File(“C:\Java\apache-tomcat-5.5.17\webapps\loja”);
File file = File.createTempFile(“imagemCD_”, “.jpg”,dirc);

J

Olá meu caro colega!!!

Vamos acabar com o problema que aflinge a sua alma.

Em nome deste tópico e por ter tentado também, mas via AJAX que é uma outra conversa, eu implementei o upload de arquivo com base no vRaptor o qual também utilizo bastante.

Implementei e não tive problemas, sinceramente foi de primeira, inclusive com o nome correto, sem ser o nome temporário que é criado no momento do upload. Logo vamos ao que interessa:

Primeiramente implementei uma classe para facilitar o trabalho utilizando commons.io conforme sugerido por um de nossos nobres colegas:

package com.jwcunha.utils;


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.io.IOUtils;

/**
 *
 * @author jwcunha
 */
public class UploadFile{
    
    public void uploadFile(File file, String path, String fileName) throws FileUploadException{
        try{
            File uploadedFile = file;
            String separetedSO = "\\";
            String completePath = path+separetedSO+fileName;
            
            //System.out.println("File: "+uploadedFile.getAbsolutePath());
            InputStream input = new BufferedInputStream(new FileInputStream(
                    uploadedFile));
            OutputStream output = new BufferedOutputStream(new FileOutputStream(
                    new File(completePath)));
            
            
            IOUtils.copy(input,output);
            
        }catch(Exception ex){
            ex.printStackTrace();
        }       
    }   
}

Em seguida criei o formulário para envio, o detalhe para upload está, como vc deve saber, em alterar o enctype o qual ficará assim:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >
<title>Upload de arquivo</title>
</head>
<body>
<form method="post" ACTION="arquivo.upload.logic" ENCTYPE='multipart/form-data'>
        File:<input type="file" name="fileInfo" ><br>
        <input type="submit" name="Submit" value="send"> 
        <input type="hidden" name="action" value="upload">
</form>

</body>
</html>

E para finalizar criei meu logic para receber os dados do formulário, aqui o detalhe está em pegar o realPath a partir da injeção do ServletContext utilizando o @In, desta forma no meu diretório web, onde ficam minhas jsps e afins eu criei um diretório chamados gravados, onde os arquivo serão armazenados.

package com.jwcunha.logic;

import java.io.File;

import org.apache.commons.fileupload.FileUploadException;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.In;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.interceptor.MultipartRequestInterceptor;
import org.vraptor.interceptor.UploadedFileInformation;

import com.jwcunha.utils.UploadFile;
import javax.servlet.ServletContext;

@Component
@InterceptedBy(MultipartRequestInterceptor.class)
public class ArquivoLogic {
	
	@In 
	private ServletContext servletContext;
	
	@In(required=false)	
    private UploadedFileInformation fileInfo;
	public void upload() {		
		File file = fileInfo.getFile();
		//File file, String path, String fileName
		String path = this.servletContext.getRealPath("/")+"gravados";
		System.out.println(file.getAbsolutePath());
		UploadFile upFile = new UploadFile();
		try {
			upFile.uploadFile(file, path, this.fileInfo.getFileName());
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}       
	}
	
            //lógica para referenciar o formulário como arquivo.formulario.logic no momento da chamada
	public void formulario(){
		
	}
}

e para finalizar o arquivo que indicará o sucesso da chamada do nosso método / action que é o upload.ok.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Confirmação de envio</title>
</head>
<body>
        O arquivo foi gravado com sucesso
 </body>
</html>

No mais é só importar as bibliotecas correspondentes e voilà monsieur.

É isso, espero ter ajudado!!!

[]'s

J

[REMOVIDO] - Empolguei e repeti a solução

A

vixi cara nao esta funcionando ele manda a foto para meu workspace mais quando vou abrir a foto nao abre… o arquivo esta vazio!!!e tem outra… ele ja vai publicar!!! vc nunka fizeraum issso em nenhuma aplicaçao!!!

J

Estranho mas aqui qdo fui fazer testes mais detalhados todos são gravados no diretório correto, mas alguns vazios, outros menores do que o original e outros abrem perfeitamente.

Ainda não sei a causa do problema…

Aguardando solução …

J

Problema resolvido, refaça o seu Logic da seguinte forma:

package com.jwcunha.logic;


import java.io.File;

import javax.servlet.ServletContext;

import org.vraptor.annotations.Component;
import org.vraptor.annotations.In;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.interceptor.MultipartRequestInterceptor;
import org.vraptor.interceptor.UploadedFileInformation;

@Component
@InterceptedBy(MultipartRequestInterceptor.class)
public class ArquivoLogic {
	
	@In 
	private ServletContext servletContext;	
	
	@In(required=false)	
    private UploadedFileInformation fileInfo;
	public void upload() {		
		File file = fileInfo.getFile();
		
		String path = this.servletContext.getRealPath("/")+"gravados";		
		
		String separetedSO = "\\";		
		String completePath = path + separetedSO + this.fileInfo.getFileName();		
		try {		
			file.renameTo(new File(completePath));
		} catch (Exception ex) {
			ex.printStackTrace();
		}	
	}
	
	public void formulario(){
		
	}
}

Observe que ao invés de usar o IOUtils.copy(input, output) eu simplesmente fiz um rename do arquivo de acordo com o post do Nico em http://www.vraptor.com.br/forum/posts/list/58.page e finalmente voilà monsieur!!! Desta forma eu tb aboli o uso da minha classe FileUpload que se tornou, para este caso simples, dispensável!!!

Faça alguns testes e vejamos o que irá ocorrer, eu por exemplo já verifiquei que o tamanho do arquivo se maior que, salvo engano, 2MB, por default irá falhar mas já vi algumas soluções para isto mas agora deixo por sua conta pesquisar um pouco e postar pra gente a solução final. Aquele abraço.

Felicidades

A

AE PESSOAL FUNCIONOU =) vlww… pela ajuda… agora vou apenas alterar o nome do arquivo para se acontecer d existirem arquivos duplicados… mais d resto perfeito!! flw…!!!
porem deixa eu perguntar uma coisa… ele quando salva imagem eles esta salvando no meu computador… pois esse pc eh cliente e servidor… se eu abrir a aplicacao em apenas um cliente… ele nao vai salvar a imagem local no cliente??? como ele vai mandar ela para o servidor???

Pedrosa

http://pt.wikipedia.org/wiki/Upload

A

hah maus cara nao tenho internet liberada aqui no serviço!

J

No servidor.

PS.: Edita o título do post como [RESOLVIDO] ajuda bastante outros que vierem a precisar.

[]'s

A

sim… soh q ele nun esta funcionando total mente ele esta cm esse problema

porem deixa eu perguntar uma coisa… ele quando salva imagem eles esta salvando no meu computador… pois esse pc eh cliente e servidor… se eu abrir a aplicacao em apenas um cliente… ele nao vai salvar a imagem local no cliente??? como ele vai mandar ela para o servidor???

Pedrosa

Upload é a transferência de dados de um computador local para um servidor. Caso ambos estejam em rede, pode-se usar um servidor de FTP, HTTP ou qualquer outro protocolo que permita a transferência.

Definição

Caso o servidor de upload esteja na Internet, o usuário do serviço passa a dispor de um repositório de arquivos, similar a um disco rígido, disponível para acesso em qualquer computador que esteja na Internet.Upload é parecido com Download, só que em vez de carregar arquivos para a sua máquina, você os envia para o servidor.

fonte wikpedia.

K

Eu tenho uma duvida sobre isso…executei esse mesmo exemplo acima…mas ta dando NullPointerException na linha

File file = fileInfo.getFile();

Alguem sabe me falar porque?

Washington_Wiltenbur

Gostei do seu exemplo jwcunha…

Agora eu gostaria de armazenar o caminho desta imagem no banco e mostrar esta imagem na minha jsp.

Vc sabe como q faz isso???

Criado 18 de maio de 2007
Ultima resposta 29 de mai. de 2008
Respostas 31
Participantes 8