none
Como abrir OpenFileDialog em Aplicação Web Implantada ? RRS feed

  • Pergunta

  • Olá pessoal, estou tentando fazer uma pequena aplicação Web e em uma parte dela tenho que Trabalhar com anexos.

    Em determinado momento, o usuario pode clicar em um botão, e escolher um arquivo que salvo seus bytes em um banco de dados da aplicação. Para o usuário escolher este aquivo durante a execução da aplicação web chamo um OpenFileDialog(nativo do Windows forms).  Antes de implantar a aplicação no IIEs consigo fazer como planejado. O usuario escolhe este arquivo através do objeto citado acima, depois clica em salvar e o arquvio vai pro banco de dados(resumi aqui como faço).

    Mas depois que implanto a aplicação, gera-se esta excessão:

    "Mostrar um formulário ou uma caixa de diálogo restrita quando o aplicativo não está no modo UserInteractive não é uma operação válida. Especifique o estilo ServiceNotification ou DefaultDesktopOnly para exibir uma notificação de um aplicativo de serviços."

    Optei  em usar o 'OpenFileDialog' para pegar o nome compelto do arquivo(com o caminho), porque usando compontente html <input = file> não me mostrava o caminho completo do arquivo e sim um :

    C:\fakepath\test.csv

    me impossibilitando de achar o arquvio e salvar os bytes dele no banco.

    Se alguem souber como resolver este problema do 'fakepath' também me ajuda. Pois so quero o caminho compelto do arquivo para

    poder usar em um Objeto FileStream e salvar no banco de dados.

    Grato desde ja!


    Wagner dos Santos

    quarta-feira, 21 de outubro de 2015 16:33

Respostas

  • Você quer pegar o Bytes do arquivo isso já fica transparente quando se utiliza assim:

    @using (Html.BeginForm("PostItems", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {    
        <input type="file" name="file" id="file" />
        <button type="submit">Enviar</button>
    }

    Código

    [HttpPost]
    public ActionResult PostItems(HttpPostedFileBase file)
    {
    
    	long length = file.InputStream.Length;
    
    	byte[] arrayByteFile = new byte[length];
    
    	file.InputStream.Read(arrayByteFile, 0, (int)length);
    
    	//na variavel arrayByteFile você tem o array de byte para gravar no seu banco
    
    	return RedirectToAction("Index");
    }
    A variavel arrayByteFile já tem as informações em bytes do arquivo é só gravar na sua base de dados.


    Fulvio C

    • Marcado como Resposta Wagner Santos quinta-feira, 10 de dezembro de 2015 15:47
    terça-feira, 10 de novembro de 2015 12:00