Upload de arquivo para servidor local e remoto

6 respostas
F
Tenho uma aplicação web que faço upload de arquivo usando JSF, segue codigo:
private UploadedFile uploadItem;
    private File file;
    private byte[] byteArray;

    public void listener(FileUploadEvent event) throws Exception {
        uploadItem = event.getUploadedFile();
        System.out.println("Nome do arquivo enviado: " + uploadItem.getName());
        System.out.println("Tipo do arquivo enviado: " + uploadItem.getContentType());
        System.out.println("Tamanho do arquivo enviado: " + uploadItem.getSize());
        System.out.println("InpuStream: " + uploadItem.getInputStream());
        System.out.println("Byte: " + uploadItem.getData());
        byteArray = uploadItem.getData();
        //exibe caminho completo da aplicação
        String caminho = System.getProperty("user.dir");
        //System.out.println(caminho+"\\");
        caminho += "\\";
        String c = "C:\\Users\\fabio.cunha\\Documents\\Backup\\Backup\\NetBeansProjects\\Curriculo\\";
        file = new java.io.File(c + uploadItem.getName());
        FileOutputStream in = new FileOutputStream(file);
        in.write(byteArray);
        in.close();

    }
O codigo funciona perfeitamente, porém apenas quando uso ele localmente na minha maquina, quando envio ele pro servidor que é linux, como o caminho é diferente simplesmente não funciona, como posso usar um caminho para que ele seja o mesmo para meu servidor local e no servidor remoto? ps: A pasta Curriculo é onde está minha aplicação fica, tanto no servidor local quanto no remoto

6 Respostas

H

Troca o \ por /

Funciona para windows tb. [=

F

Entendo, mas quando uso o comando

String caminho = System.getProperty("user.dir"); System.out.println(caminho+"\\");
Ele imprime o caminho desse jeito

C:\Users\fabio.cunha\Documents\Backup\Backup\NetBeansProjects\Curriculo\

Porém pra funcionar com a classe ‘File’ a barra tem q ser assim “\” ou “/” como vc mencionou, somente uma ‘’ fica como caractere de escape e ai não funciona
Eu até passei a String na mão no meu exemplo, mas porém a idéia era que eu não precisasse passar na mão e sim usando alguma instrução do próprio java que pegasse o caminho correto da aplicação independente de que tipo de servidor(ou diretório) ele esteja.

No caso o comando

System.getProperty("user.dir");

consegue pegar o caminho correto, porém não adianta devido ele gerar somente uma ‘’ para descrever o caminho

H

Padrão windows é com , unix /.

Se vc tentar com / no windows dá erro?

Vc pode fazer um if louco então. If windows usa \ se linux usa /, mas não vejo por que uma vez que / funciona para os dois.

F

Acho q não consegui explicar direito,
no caso na minha maquina local o diretorio seria

C:/Users/fabio.cunha/Documents/Backup/Backup/NetBeansProjects/Curriculo/

Porém quando eu enviasse o projeto para o servidor o caminho vai ser outro
na verdade eu nem sei qual é, mas deve ser algo do tipo

/home/nomedoservidor/tomcat/aplicacao(to chutando o caminho)

O que eu estou querendo é pegar o caminho absoluto e usar ele junto com o ‘new File’ para criar meus arquivos.
Por isso tentei usar o comando

System.getProperty("user.dir");para trazer o caminho absoluto, e para funcionar com o ‘new File’ precisa ser ‘\’ ou ‘/’, mas ele ja traz formatado com ‘’ no windows. Por isso queria uma maneira alternativa de pegar esse caminho absoluto q não fosse usando o System.getProperty("user.dir"); para que ele trouxesse formatado o caminho usando ‘/’ ou ‘\’.
Não adianta passar a String do caminho na mão pq ele vai ter caminhos diferentes quando estou desenvolvendo na minha maquina(windows) e quando ele estiver no servidor(linux)

Espero que eu tenha conseguido explicar direito, t+

H

Pega o caminho como String e manda um seuCaminho.replaceAll("\", “/”);

SE não me engano é assim.

user.dir traz oq no linux e no windows? Tem como você colocar?

F

user.dir no windows traz
C:\Users\fabio.cunha\Documents\Backup\Instalados\apache-tomcat-6.0.33\bin
no linux eu não sei o q ele traz, mas sua idéia de usar
seuCaminho.replaceAll("\", “/”);
é uma boa idéia, vou tentar

Criado 30 de dezembro de 2011
Ultima resposta 30 de dez. de 2011
Respostas 6
Participantes 2