Upload de arquivo - resolvido!

Usando o componente <t:inputFileUpload> consigo mandar o arquivo para o servidor. Mas o arquivo acaba indo parar dentro da pasta temp do Tomcat e com um nome esquisito, algo como “upload__33ecc623_120abc829b1__8000_00000015.tmp”.
Eu gostaria de mandar o arquivo para dentro de uma pasta qualquer do meu contexto.
Alguém sabe?
Desde já agradeço.

Resolvido!
haja vista a enorme quantidade de programadores querendo saber como se pode fazer isto, segue o código:

coloque isto na tua jsp (jspx):

<h:form id="form1" enctype="multipart/form-data"> <t:inputFileUpload storage="file" value="#{meuBean.uploadedFile}"/> <h:commandButton action="#{meuBean.upload}"></h:commandButton> </h:form>

coloque este método no bean (meuBean):

[code]public String upload(){
	
	FacesContext ctx = FacesContext.getCurrentInstance();
	
	ServletContext servletContext =  (ServletContext)ctx.getExternalContext().getContext();

    //no contexto web, deverá existir uma pasta chamada temp
    String path = servletContext.getRealPath("/temp");

    String arquivo = uploadedFile.getName();

     //local onde será gravado o arquivo no contexto web (o arquivo será renomeado para teste.txt)
    //isto dentro da pasta (contexto)/temp
    String fullPath = path + "/teste.txt";

    String contentType = uploadedFilePosicionamento.getContentType();

    ctx.getExternalContext().getApplicationMap().put("fileupload_type", contentType);
    ctx.getExternalContext().getApplicationMap().put("fileupload_name", arquivo);

    File file = new File(fullPath);
   
    BufferedInputStream bufferedInputStream = null;
    FileOutputStream fileOutputStream = null;
    // Salvando o arquivo
    try {
    	bufferedInputStream = new BufferedInputStream(uploadedFile.getInputStream());
        fileOutputStream = new FileOutputStream(file);
        byte[] buffer = new byte[1024];
        int count;
        while ((count = bufferedInputStream.read(buffer)) > 0)
            fileOutputStream.write(buffer, 0, count);
                    
    } catch (IOException e) {
		e.printStackTrace();
	} finally {
        try {
			bufferedInputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
        try {
			fileOutputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
    }

}[/code]

Até a próxima.

Olá amigo,

Achei interessante seu codigo, eu sou iniciante no java, e estou desenvolvendo um programa no qual o usuario
entre com todos os seus dados e junto com um arquivo, que deve ser tudo armazenado em um banco de dados,
e solicitados qd necessario, poderia me passar o codigo completo com um pouco mais de detalhes, e o codigo para o mysql.
Eu já tenho o formulario pronto em jsp, agora preciso armazenar junto com estes dados um arquivo. Me dá uma ajuda aí…

Obrigado,

Abrç

Certo,
para voce gravar os dados em um banco, muita coisa ainda precisa colocar no seu código, tais como classes DAO, etc. Ainda precisaria organizar o seu sitema baseando tudo em myFaces. Aqui no guj tem respostas para tudo isto, é só procurar que tem exemplos completos.
Agora, para fazer o upload do arquivo, o código está completo, faltando apenas declarar no início da classe o objeto que vai receber o arquivo da sua jsp:

[code]private UploadedFile uploadedFile;

//incluir métodos get/set[/code]

…não se esquecendo de acrescentar na pasta WEB-INF/lib o jar do tomahawk (tomahawk-1.1.6.jar) que você pode obter junto ao site da jakarta (http://myfaces.apache.org/)

[quote=knik]Resolvido!
haja vista a enorme quantidade de programadores querendo saber como se pode fazer isto, segue o código:

coloque isto na tua jsp (jspx):

<h:form id="form1" enctype="multipart/form-data"> <t:inputFileUpload storage="file" value="#{meuBean.uploadedFile}"/> <h:commandButton action="#{meuBean.upload}"></h:commandButton> </h:form>

coloque este método no bean (meuBean):

[code]public String upload(){
	
	FacesContext ctx = FacesContext.getCurrentInstance();
	
	ServletContext servletContext =  (ServletContext)ctx.getExternalContext().getContext();

    //no contexto web, deverá existir uma pasta chamada temp
    String path = servletContext.getRealPath("/temp");

    String arquivo = uploadedFile.getName();

     //local onde será gravado o arquivo no contexto web (o arquivo será renomeado para teste.txt)
    //isto dentro da pasta (contexto)/temp
    String fullPath = path + "/teste.txt";

    String contentType = uploadedFilePosicionamento.getContentType();

    ctx.getExternalContext().getApplicationMap().put("fileupload_type", contentType);
    ctx.getExternalContext().getApplicationMap().put("fileupload_name", arquivo);

    File file = new File(fullPath);
   
    BufferedInputStream bufferedInputStream = null;
    FileOutputStream fileOutputStream = null;
    // Salvando o arquivo
    try {
    	bufferedInputStream = new BufferedInputStream(uploadedFile.getInputStream());
        fileOutputStream = new FileOutputStream(file);
        byte[] buffer = new byte[1024];
        int count;
        while ((count = bufferedInputStream.read(buffer)) > 0)
            fileOutputStream.write(buffer, 0, count);
                    
    } catch (IOException e) {
		e.printStackTrace();
	} finally {
        try {
			bufferedInputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
        try {
			fileOutputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
    }

}[/code]

Até a próxima.[/quote]

Onde está o return desse método???

ooops, me esqueci dele:

return null;

retorna para a mesma página, pois é um experimento. Quem quiser modificar apontando para outra página (algo como uma mensagem tipo “arquivo enviado com sucesso”), poderão fazer, basta declarar isto, a grosso modo:

return "pagina-sucesso"

…e lógico, adicionar o código abaixo no faces-config:

<navigation-case> <from-outcome>pagina-sucesso</from-outcome> <to-view-id>/sucesso-download.jsp</to-view-id> <redirect/> </navigation-case>

Té mais.

Olá, estou tentando fazer um upload de arquivo e achei o inputUploadFile do Tomahawk um bom componente…

Estava tentando implementar utilizando seu codigo, pelo menos pra fazer o upload, pq ateh agora naum optive sucesso…

JSP

<h:form id="uploadImagem" enctype="multipart/form-data">
                            <t:inputFileUpload id="file" value="#{fileupload.uploadedFile}" storage="file" />
                            <t:commandButton value="Salvar Imagem" action="#{fileupload.upload}" />
                        </h:form>

Bean

public String upload() throws IOException {
        FacesContext ctx = FacesContext.getCurrentInstance();

        ServletContext servletContext = (ServletContext) ctx.getExternalContext().getContext();

        //no contexto web, deverá existir uma pasta chamada temp
        String path = servletContext.getRealPath("/imagem");

        String arquivo = getUploadedFile().getName();

        //local onde será gravado o arquivo no contexto web (o arquivo será renomeado para teste.txt)
        //isto dentro da pasta (contexto)/temp
        String fullPath = path + "/teste.txt";

        String contentType = uploadedFile.getContentType();

        ctx.getExternalContext().getApplicationMap().put("fileupload_type", contentType);
        ctx.getExternalContext().getApplicationMap().put("fileupload_name", arquivo);

        File file = new File(fullPath);

        BufferedInputStream bufferedInputStream = null;
        FileOutputStream fileOutputStream = null;
        // Salvando o arquivo
        try {
            bufferedInputStream = new BufferedInputStream(getUploadedFile().getInputStream());
            fileOutputStream = new FileOutputStream(file);
            byte[] buffer = new byte[1024];
            int count;
            while ((count = bufferedInputStream.read(buffer)) > 0) {
                fileOutputStream.write(buffer, 0, count);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    } //fim do metodo upload

So que esta dando erro de NullPoint na linha String contentType = uploadedFile.getContentType();
Acho que a JSP não esta passando o valor pra variavel uploadedFile

Voce adicionou o Extension Filter no web.xml… eu adicionei no meu, mas mesmo assim sem sucesso.
Se voces puderem me ajudar…

Obriagado