[Flex+Java] Upload de Arquivo. Erro #2038 IO Error

Alguem já conseguiu fazer Upload de arquivo usando Java + Adobe Flex tentei fazer esse exemplo abaixo mais sempre da o seguinte erro:
IO Error: [IOErrorEvent type=“ioError” bubbles=false cancelable=false eventPhase=2 text=“Error #2038”]

http://www.adobe.com/devnet/flex/articles/file_upload.html

Silvano,

Você debugou o Java pra ver se tá dando algum erro nele?

[]s

Estava com um problema parecido que corrigi aplicando o método POST ao invés do GET para o lado FLEX.

Exemplo:

public function enviar():void
{
if (this.fileRef == null) return;

   var request:URLRequest = new URLRequest("http://localhost:8080/Projeto/swf/upload.jsp");
   
   request.method = URLRequestMethod.POST;
         
   try
   {
      fileRef.upload(request);
   }
   catch (error:Error)
   {
      txtPathFile.text = "Unable to upload file.";
   }

}

Silvano,
Tem um usando o BlazeDS q acho bem fácil. http://imasters.uol.com.br/artigo/13619/flash/realizando_download_e_upload_de_arquivos_com_blazeds/

[]s

Eu fiz umas mudanças ao configuraçãos,

JAVA

Sim, você está fazendo com Windows
em web.xml você tem que mudar o diretório (UploadDirectory)


UploadDirectory
C:/Users/javaph/Desktop/Guj/FileUpload/exec/

Eu mude tambem em web.xml
esta mudança assim que eu gosto “action.do

<servlet-mapping>
    <servlet-name>UploadHandler</servlet-name>
    <url-pattern>/uploadhandler.do</url-pattern>
</servlet-mapping>

depois

para testar do servlet Eu adiciono um método

public class UploadHandler extends HttpServlet {

public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException {
try {
response.getWriter().println(“Listo”);
} catch (IOException e) {
throw new ServletException(e);
}
}

}

NOTA : você exige “commons-fileupload-1.2.1.jar” em "WEB-INF/lib"
http://mirror.nyi.net/apache/commons/fileupload/binaries/commons-fileupload-1.2.1-bin.zip

http://localhost:9334/FileUpload/uploadhandler.do?test

quando eu obter “Listo” no browser estou listo pra Flex

FLEX

AGORA
É mais fácil se você tive FlexBuilder

no diretório "assets"
no arquivo “properties.xml”

Eu mudar para a nova URL


UploadHandler
http://localhost:9334/FileUpload/uploadhandler.do

E Tudo funciona!!!

Silvano vc conseguiu??

Estou com o mesmo problema;.;

Preciso realizar um upload em uma aplcacao Java Flex BlazeDS + Tom CAT

Em Qual OS ta trabalhando?

[quote=marciofermino]Silvano vc conseguiu??

Estou com o mesmo problema;.;

Preciso realizar um upload em uma aplcacao Java Flex BlazeDS + Tom CAT[/quote]

o tomcat remoto esta no Windows Server 2003

primeiro você precisa de permisos pra escrever

depois, eu fiz isso fazendo os cambios no web.xml e outros arquivos
slds

falei com o adm da rede ele me disse que deu as permissoes
e quanto ao web xml vc tem um exemplo
nao sei seria possivel ou pedir demais
vc poderia falar por skype ou msn?

nao pude adicionar-lhe, eu somente mudei o exemplo

[quote=marciofermino]falei com o adm da rede ele me disse que deu as permissoes
e quanto ao web xml vc tem um exemplo
nao sei seria possivel ou pedir demais
vc poderia falar por skype ou msn?[/quote]

No começo o meu estava dando esse erro também porém, agora está funcionando de boa, no meu web.xml estava mapeando duas Servlet a MessageBrokerServlet(que o flex utiliza) e a minha FileUpload, ai estava ocorrendo um conflito já que minha MessageBrokerServlet tinha uma tag display-name eu removi apenas essa tag e ficou beleza. Tente ai talvéz seja isso também, qualquer coisa avisa aí!

A forma mais fácil de fazer uploads sem sofrer é fazer o upload pelo flash player e serializar um objeto com o conteudo do arquivo em um ByteArray… Quando chegar no java, basta escrever o arquivo que veio serializado no objeto :wink:

Uso o exemplo desse link para fazer upload
http://blog.digows.com/upload-de-arquivos-com-flex-php-e-java/
Qual seria essa outra forma? tem um exemplo?

Bom, vou partir do exemplo que você tem um botão “Procurar” efetuou o clique nele:

Método para controle do click no botão de selecionar arquivos

			protected function btnSelecionarImportacaoClickHandler(event:MouseEvent) : void
			{
				this.fileReference		= new FileReference();
				this.fileReference.browse();
				this.fileReference.addEventListener(Event.SELECT, 		selectHandler);
				this.fileReference.addEventListener(Event.COMPLETE, 		completeHandler);
				this.fileReference.addEventListener(IOErrorEvent.IO_ERROR,	ioErrorHandler);
			}

Carrega o arquivo na memoria

			protected function selectHandler(event:Event) : void
			{
				this.fileReference.load();
			}

Evento de controle quando o player finaliza a leitura do arquivo para ser submetido ao servidor

			protected function completeHandler(event:Event) : void
			{
				this.fileUploadVO			= new FileUploadVO();
				this.fileUploadVO.file			= new ByteArray();
				(event.currentTarget as FileReference).data.readBytes(this.fileUploadVO.file, 0, (event.currentTarget as FileReference).data.length);				
			}

Evento de controle quando ocorre uma violação ao arquivo que será enviado para leitura

			protected function ioErrorHandler(event:IOErrorEvent) : void
			{
			}

Objeto que será enviado para o Java

package seu.pacote.flex.FileUploadVO
{
	import flash.utils.ByteArray;
	[Bindable]
	[RemoteClass(alias="seu.pacote.java.FileUploadVO")]
	public class FileUploadVO
	{
		public function FileUploadVO()
		{
		}
		public var file:ByteArray;
	}
}

Ai basta você enviar esse objeto para o java, como um RemoteObject normalmente, ao chegar lá… java básico, pegar o arquivo e escrever no servidor, ou guardar a informação no banco de dados

Legal, esse exemplo usa servlet?? ou é só isso ai já funciona?

Não usa servlet, apenas RemoteObject :wink:

ok mais vc tem exemplo:?

Foi o que eu passei … A parte de RemoteObject é como você faz qualquer comunicação entre Flex e Java

#2038… errinho safado esse ai.

Melhor usar a solução proposta pelo companheiro de usar RemoteObject. Fazer upload para um servlet pode dar incompatilibilidade até com o proxy no Linux + Firefox.
Até hoje temos problema em uma aplicação aqui por conta disso.