Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcos.cardoso

[Resolvido] Selecionar arquivo externo

Recommended Posts

Boa noite,

 

tive uma idéia para um aplicativo que irei desenvolver. Esse aplicativo vai rodar desktop mesmo.

É o seguinte: esse aplicativo deve possibilitar ao usuário escolher uma foto sua para colocar no palco. Então, como o flash não implementa navegação em diretórios, pensei em usar java.

O funcionamento disso seria o seguinte: executaria meu aplicativo em flash e no momento em que o usuário quiser importar a imagem para o palco ele poderá clicar em um botão que executará o .jar (fscommand) que abrirá um chooser para o usuário encontrar a foto a abrí-la. Só que ao invés de simplesmente arí-la será gerado um xml que o flash irá ler. Assim a foto poderá ser importada. Depois de importada a foto, o usuário pode fazer o que quiser. Esse aplicativo será usado em uma loja de roupas, onde o cliente poderá montar seu look.

O funcionamento é basicamente esse.

 

O que gostaria de saber é se essa caracterização é meio apelona, ou se posso usar isso, sem acarretar dores de cabeça ou marketing negativo quanto à eficiência do aplicativo, justamente por ter misturado duas vertentes que não andam juntas (flash e java).

 

Como vocês vêem essa idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

errrrr

 

Desculpe mas filereference() te a opção browser do FLASH mesmo que você seleciona o arquivo onde você quiser...

Para enviar para algum lugar... por upload(mas ai vai precisar de um PHP para fazer o upload)

 

Existem milhares de projetos de filereference com php por ai e funcionam muuuuuuito bem obrigado.

 

Com java nunca fiz... já fiz brincadeiras do tipo com javascript e deu o mesmo efeito...

 

Então escolha a melhor opção que você achar.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

fileReference() seria uma boa, mas como vai roda so no pc do usuário (dono da loja), não vai rolar.

Vou tentar explicar para o cliente como fica implementando minha idéia. Também não acho que seja o ideal, mas se o cliente concordar... faço desse jeito mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara você sempre pode fazer o script todo e tals...

 

E com um botão de sair ou limpar... apaga a foto do colega da pasta selecionada... ou simplesmente vai colocar o mesmo nome para todas as imagens uploadadas assim ele vai subistituir um dado pelo outro. E assim você não fica ocupando o computador do cliente com bobagens.

 

É um jeito simples e leve digamos assim... pq como é local o upload acontece quase que instantaneamente.

E a foto também carregará rapidamente.

 

Não custa tentar.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim a pasta é pré definida...

E não precisa de XML para recarregar a foto... basta colocar o onComplete no filereference() e ai pegar o nome do arquivo que foi upado e juntar com a pasta já pré definida para resolver isso.

 

E quanto a remover basta criar um arquivo excluir.php onde vai receber o nome do arquivo ou... já vai estar la o nome... e fazer um unlink(nome do arquivo com diretório)

E pronto você fez o seu excluir....

 

Vou usar um artigo daqui do imasters como exemplo

 

Exemplo com o filereference():

/*
* Código criado por Thiago Cruz com base no artigo:
* http://imasters.com.br/artigo/3627/fla..._filereference/
*/
//importando a classe necessária. flash.net.FileReference
import flash.net.FileReference;
//
//definindo botões, movies, objetos e etc...
var btEnviar:MovieClip;
var btBrowse:MovieClip;
var tFile:TextField = _root.createTextField('tFile',_root.getNextHighestDepth(), 20, 340, 200,20);
var mcStatus:TextField = _root.createTextField('mcStatus',_root.getNextHighestDepth(), 20, 380, 200,20);
var objUpload:Object = new Object();
var arquivosPermitidos:Array = new Array();
//Crio o responsavel pelo carregamento do clip
var mcl:MovieClipLoader = new MovieClipLoader();
//Crio o objeto de escuta
var obj:Object = new Object();
//Adiciono o ouvinte
mcl.addListener(obj);
//
//criando a instancia da classe FileReference, a nova classe responsável pelo Upload...
var frUpload:FileReference = new FileReference();
//
function initUpload(Void):Void
{
//escondendo mcStatus, resposável por dizer ao user em que parte está o processo...
mcStatus.text = "carregando";
//adicionando a lista de extensões permitidas para o Seleção...
//só imagens .jpg...
arquivosPermitidos[0] = {description:"Imagens (*.jpg)", extension:"*.jpg; *.jpeg"};
//só imagens .gif...
arquivosPermitidos[1] = {description:"Imagens (*.gif)", extension:"*.giff; *.gif"};
//ação de escolha de um arquivo na caixa de browse...
objUpload.onSelect = function(f:FileReference):Void
{
tFile.text = f.name;
}
//quando o arquivo for enviado totalmente ao servidor e estar Completo, retornará neste Método...
objUpload.onComplete = function(f:FileReference):Void {
//alterando mcStatus...
var mc:MovieClip = _root.createEmptyMovieClip('mc', _root.getNextHighestDepth());
mcl.loadClip(f.name,mc);
mcStatus.text = 'carregado';
}
//caso aprensente algum erro no envio...
objUpload.onHTTPError = objUpload.onIOError = function() {
//alterando mcStatus...
mcStatus.text = "error";
}
//adicionando as ações de listener ao objeto de Upload...
frUpload.addListener(objUpload);
//
//ao clicar no botão abrir a caixa de seleção
btBrowse.onRelease = function(Void):Void
{
//método para abrir a caixa de seleção na classe FileReference...
//FileReference.browse(arquivosPermitidos), os isso é opcional, caso queiram liberar todos os arquivos
//é so não utilizar do parametro...
frUpload.browse(arquivosPermitidos);
}
//
//ao clicar no botão enviar, a classe joga o arquivo em um multipart para uma linguagens server-side
//qualquer, em nosso caso vamos utilizar PHP.
btEnviar.onRelease = function(Void):Void
{
//alterando mcStatus...
mcStatus.text = 'enviando';
//método para enviar o arquivo em multipart ao servidor... FileReference.upload(seuEndereço)...
frUpload.upload("upload.php");
}
}
//
//iniciando nosso projeto...
initUpload();

//Função que vai fazer o resize()
obj.onLoadInit = function(){
    if(mc._width > 200){
        mc._xscale = mc._yscale = 20;
    }
};

//Código para apagar a imagem
var loadvars:LoadVars = new LoadVars();
limpar.onPress = function(){
    mcStatus.text = 'apagando';
    loadvars.load('limpa.php');
}
//Função de retorno do limpa.php
loadvars.onLoad = function(ok){
    if(ok){
        mcStatus.text = 'foto apagada';
    }else {
        mcStatus.text = 'erro ao apagar';
    }
}

O arquivo de upload:

<?php
//diretório destino das imagens dentro da pasta da aplicação...
//deve ter permissão para escrita chmod(777)...
//recebendo o arquivo multipart vindo do flash...
$file = $_FILES["Filedata"];
//finalizando o upload e criando apartir do arquivo temp, multipart, um novo arquivo
//em nossa pasta de destino. O echo serve para dizer ao flash se deu certo ou não...
echo move_uploaded_file($file["tmp_name"], 'foto.jpg');
?>

Arquivo para excluir:

<?php
unlink('foto.jpg');
echo "&ok=success";
?>

 

Bom é isso ai...

Eu daria o crédito... se fosse eu quem fosse copiar....

Mas vocês quem sabem

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nohh, vlw mesmo por passar isso ai pra mim. Agora, se precisar colocar no site do cliente fica mais fácil.

Andei lendo alguma coisa aki e descobri que o AS 3.0 tem algumas classes para manipulação de diretórios, em AIR. Como AIR é pra desktop mesmo, acho que vou pesquisar sobre isso.

Já fiz alguns testes aki e consegui alguma coisa. Você conhece a classe File?

porque em um trexinho de código que peguei tem um erro q não consegui decifrar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, o código é o seguinte (peguei da documentação da Adobe):

import flash.filesystem.*;
import flash.events.Event;
import flash.net.FileFilter;

var fileToOpen:File = new File();
var txtFilter:FileFilter = new FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml");

try 
{
    fileToOpen.browseForOpen("Open", [txtFilter]);
    fileToOpen.addEventListener(Event.SELECT, fileSelected);
}
catch (error:Error)
{
    trace("Failed:", error.message);
}

function fileSelected(event:Event):void 
{
    var stream:FileStream = new FileStream();
    stream.open(event.target, FileMode.READ);
    var fileData:String = stream.readUTFBytes(stream.bytesAvailable);
    trace(fileData);
}

Se você testar ai vai dar um erro, mas não sei mto bem identificar. Se puder dar uma olhadinha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.