Upload Foto JSF

Pessoal,

estou implementando uma aplicaçao onde vou precisar fazer upload de foto.

Tenho um problema, Nao posso usar RichFaces nem MyFaces.

Tenho que fazer à moda antiga…

Meu problema é que nao consigo pegar o que foi escolhido via request… ta vindo null…

Alguem ajuda?

segue o código.


UploadBean.java



public class UploadBean {
	
	private ServidorFacade servidorFacade;
	private File file;
	private Servidor servidor;
	
	
	public void saveUpload() throws BusinessException, IOException
	{

		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
	
		// Captura o arquivo que foi selecionado na tela via request. 
		File file = new File(request.getParameter("idArquivoUpload")); // Aqui tá nuuullll!!!!!
		
		servidor.setFoto(geraBlob(file));
		
		try
		{
			// Salva a foto do servidor 
			servidorFacade.save(servidor);
		} catch (BusinessException e) {
			
			throw new BusinessException(e);
		}
	}

	/**
	 * Método responsável por receber um arquivo do tipo File, convertê-lo, e retornar um array de bytes.
	 * @param arquivo
	 * @return arquivoBytes - O array de bytes
	 * @throws IOException
	 */
	public static byte[] geraBlob(File arquivo) throws IOException {
		
		byte arquivoBytes[];
		FileInputStream fileInputStream;
		int tamanhoArquivo;
		
		fileInputStream = new FileInputStream(arquivo);  
		tamanhoArquivo  = (int) arquivo.length() + 1;  
		arquivoBytes    = new byte[tamanhoArquivo];  
		fileInputStream.read(arquivoBytes);  
		fileInputStream.close();
		
		return arquivoBytes;
		
	}


	/**
	 * Retorna o File.<br>
	 * @return O File do UploadBean
	 */
	public File getFile() {
		return file;
	}


	/**
	 * Define o File do UploadBean.<br>
	 * @param file O File a ser definido para o UploadBean
	 */
	public void setFile(File file) {
		this.file = file;
	}




	/**
	 * Retorna o ServidorFacade.<br>
	 * @return O ServidorFacade do UploadBean
	 */
	public ServidorFacade getServidorFacade() {
		return servidorFacade;
	}




	/**
	 * Define o ServidorFacade do UploadBean.<br>
	 * @param servidorFacade O ServidorFacade a ser definido para o UploadBean
	 */
	public void setServidorFacade(ServidorFacade servidorFacade) {
		this.servidorFacade = servidorFacade;
	} 	

}
xhtml

<a4j:form>
						<rich:modalPanel id="panel" minHeight="200" minWidth="450" 
        						 height="200" width="500">
					        <f:facet name="header">
					            <h:panelGroup id="idPanelGroup">
					                <h:outputText id ="idModalUploadFoto" value="Upload Foto"></h:outputText>
					            </h:panelGroup>
					        </f:facet>
					        <f:facet name="controls">
					            <h:panelGroup id="idPanelGroup2">
					                <rich:componentControl id="idComponente1" for="panel" attachTo="hidelink" operation="hide" event="onclick"/>
					            </h:panelGroup>
					        </f:facet>
					        
					      <h:form enctype="multipart/form-data">
					      	<input type="file" id="idArquivoUpload" value="#{uploadBean.file}"/>
					      	<br /> <br /> 
					      	<h:commandButton value="Enviar" id="idBotaoEnviar" onclick="linkClick('resultadoPesquisa:idLinkUpload');"/>
					      </h:form>  
					      
					        <br/>
					        <br/>
					        <center>
					         <h:commandButton  value="Fechar" id="botaoFechar" type="button">	
					           	<rich:componentControl id="idBotaoFechar" for="panel" attachTo="botaoFechar" operation="hide" event="onclick"/>
					           </h:commandButton>					     
					        </center>
				     </rich:modalPanel>
				     </a4j:form>
				     <h:commandLink action="#{uploadBean.saveUpload}"  id="idLinkUpload" />

Você não preicsa pegar o valor no request para fazer upload, agora no download você vai precisar criar um servlet para fazer isso, existe algum exemplos auqi no guj mesmo.

Agora para você faazer upload como você não pode usar os components prontos do richfaces por exemplo eu te aconselho a dar uma olhada no FileUpload da apache lá tem ums exemplos muito bons são ótimos.

http://commons.apache.org/fileupload/using.html

Eu não me recordo agora de cabeça mas você define já as variáveis que ele utiliza e quando você fazer o upload ela já estão preenchidas com os bytes dos arquivos.

Abraços,

Qualquer coisa vai perguntando

Meu ingles é fraco…

n entendi mto bem.

Precisava de um exemplo prático… vc tem ai?

Abs

[quote=brunobuild]Você não preicsa pegar o valor no request para fazer upload, agora no download você vai precisar criar um servlet para fazer isso, existe algum exemplos auqi no guj mesmo.

Agora para você faazer upload como você não pode usar os components prontos do richfaces por exemplo eu te aconselho a dar uma olhada no FileUpload da apache lá tem ums exemplos muito bons são ótimos.

http://commons.apache.org/fileupload/using.html

Eu não me recordo agora de cabeça mas você define já as variáveis que ele utiliza e quando você fazer o upload ela já estão preenchidas com os bytes dos arquivos.

Abraços,

Qualquer coisa vai perguntando[/quote]

eu to fazendo igual o tutorial, mas to pegando o request… lá eu n vi onde ele faz isso. Meu código tá assim.:

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		DiskFileUpload upload = new DiskFileUpload();
		
		
		FileItemFactory factory = new DiskFileItemFactory();
		boolean isMultipart = FileUpload.isMultipartContent(request);
		
		try{  
			    List items = upload.parseRequest(request);  // Aqui da pala

the request doesn’t contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded

Vc sabe o que é isso?

Abs

Ninguém?? :shock: :frowning:

Olá amigos,

Eu fiz um programa em jsp que armazena varios dados de um cliente e
gostaria de saber como faço para que este cliente consiga anexar uma apresentação
e buscar ela qdo necessário, ou seja preciso fazer o upload de videos e apresenatações
alguem pode me dar uma força aí???

Obrigado, abç.

voo livre, acabei de postar o que voce precisa - também é uma solução para o thiago, caso ele mude de idéia e use o myFaces:
http://www.guj.com.br/posts/list/123958.java

[quote=knik]voo livre, acabei de postar o que voce precisa - também é uma solução para o thiago, caso ele mude de idéia e use o myFaces:
http://www.guj.com.br/posts/list/123958.java[/quote]

Amigao, eu resolvi usar o MyFaces, e estou seguindo esse tutorial:

http://www.onjava.com/pub/a/onjava/2005/07/13/jsfupload.html?page=2

Quando eu add a biblioteca myfaces-extensions.jar, tenho o seguinte erro na hora de subir o TomCat:

javax.faces.FacesException: Can't instantiate class: 'org.apache.myfaces.custom.rssticker.HtmlRssTicker'.
       at com.sun.faces.application.ApplicationImpl.newThing(ApplicationImpl.java:728)
       at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:352)
       at com.sun.faces.config.ConfigureListener.verifyObjects(ConfigureListener.java:1068)
       at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:342)
       at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)
       at org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
       at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
       at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
       at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
       at org.apache.catalina.core.StandardService.start(StandardService.java:448)
       at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
       at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
       at java.lang.reflect.Method.invoke(Method.java:597)
       at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
       at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
org.apache.myfaces.custom.isbnvalidator.ISBNValidator
javax.faces.FacesException: Can't instantiate class: 'org.apache.myfaces.custom.isbnvalidator.ISBNValidator'.
       at com.sun.faces.application.ApplicationImpl.newThing(ApplicationImpl.java:728)
       at com.sun.faces.application.ApplicationImpl.createValidator(ApplicationImpl.java:635)
       at com.sun.faces.config.ConfigureListener.verifyObjects(ConfigureLi

Vc sabe me dizer o que é isso?

Abração