locked
Problema <input type="file"> no google chrome RRS feed

  • Pergunta

  • Estou com o seguinte problema:

    Tenho uma tag <input type="file"> em uma página aspx, onde está a minha aplicação silverlight.

    Dentro da minha aplicação silverlight preciso disparar o evento "click" desse "input" para abrir a caixa de diálogo p/ selecionar um arquivo. Após selecionado o arquivo, preciso recuperar o caminho completo do arquivo para salvar esse caminho no banco de dados.

    No IE funciona normalmente, porém no Chrome não dispara o evento "click" e com isso não abre a caixa de seleção do arquivo.

    Segue o código:

    No aspx:

    <input id="fileDialog" type="file" />


    No Silverlight:


    HtmlElement fileUpload = HtmlPage.Document.GetElementById("fileDialog");
    fileUpload.Invoke("click");
    String pathCompleto = fileUpload.GetAttribute("value");


    Tentei fazer isso com o componente do próprio silverlight "OpenFileDialog", mas ele não permite recuperar o caminho completo do arquivo por questões de segurança do silverlight.

    Alguém sabe como driblar esse problema do chrome, e se não tiver solução para o browser, alguma outra sugestão ?

    Agradeço desde já.

    segunda-feira, 29 de abril de 2013 21:39

Todas as Respostas

  • Boa Tarde Rafael,

    Está é uma questão bem delicada a se tratar, isso por que aparentemente esse problema não vai acontecer somente no Chrome. Um fato estranho durante os testes que eu fiz em cima de sua pergunta é que utilizando o exemplo deste site:

    http://www.richardkotze.com/top-tips/how-to-open-file-dialogue-just-using-javascript

    Quando limpava a tela, o click do input file funcionava. Quando eu fazia a mesma solução, mas não apagando form e silverlight e afins, não funcionava.

    Eu também achei estranho o fato de o caminho do arquivo estar a um passo do desenvolvedor e mesmo assim, não poder ser acessado no Silverlight. Existe uma variável FileSystemInfo (Classe base do FileInfo) chamada FullPath que contém a informação que você precisa. O problema é que ela está protegida e mesmo via reflection não vai conseguir pegar ela. Outro problema é que o OpenFileDialog não herda de nenhuma classe e é sealed e para ajudar utiliza bibliotecas internas do .net, o que quebra de certa forma o método, customizar o OpenFileDialog e afins.

    Não deixei de observar que você utilizou a palavra upload no código que colocou de exemplo. Se você for fazer um upload no silverlight de um arquivo, não é necessário o caminho do arquivo (não vai servir de nada, se você não pode acessar a máquina do cliente a não ser que o silverlight esteja fora do browser). O upload de arquivos pode ser feito via Stream.

    http://www.c-sharpcorner.com/uploadfile/nipuntomar/file-upload-in-silverlight/

    http://msdn.microsoft.com/en-us/library/cc221415(v=vs.95).aspx

    Se precisar simplesmente ter os bytes, o esquema é mesmo do Stream que já existe desde o framework 1.1.

    Espero que ajude,


    Samuel Fabel

    segunda-feira, 6 de maio de 2013 18:03
  • Obrigado pela resposta Samuel.

    O que eu preciso é realmente o caminho completo do arquivo selecionado, pois ele vai ser salvo no banco de dados. Depois disso uma outra aplicação (.exe) recupera esse caminho e carrega o arquivo.

    terça-feira, 7 de maio de 2013 21:13
  • Bom Dia Rafael,

    Não sei qual é a versão do silverlight que você está usando, mas vou sugerir isso mesmo assim:

    Uma das novidades que surgiram com o Silverlight 4 foi permitir aplicações silverlight out-browser. Nas configurações desta aplicação tem um check chamado "Require elevated trust when outsite the browser" e quando você está na aplicação se a flag "Application.Current.HasElevatedPermissions" estiver true, você consegue ver as informações completadas do arquivo.

    No Silverlight 5, existe uma novidade para esta mesma funcionalidade: existe a opção da aplicação silverlight rodar com uma permissão elevada dentro do browser. Segue um link desta funcionalidade e um post que fala do assunto:

    http://msdn.microsoft.com/en-us/library/ee721083(v=vs.95).aspx

    http://justlikeamagic.com/2011/05/18/new-in-silverlight5-elevated/

    Espero que ajude,


    Samuel Fabel

    quarta-feira, 8 de maio de 2013 15:41
  • Obrigado Samuel. Uso o Silverlight 4. Vou dar uma olhada no Silverlight 5, parece ser a solução mais viável.

    Obrigado pela ajuda !

    sexta-feira, 10 de maio de 2013 18:25