none
Fazer uplpod de arquivo .PDF e enviar para banco de dados RRS feed

  • Pergunta

  • Pessoal, boa noite.

    Tenho um form onde cadastro informações sobre instrumentos. Nesse form preciso inserir um capo pra fazer Upload de 1 arquivo .PDF e a partir disso enviar para o banco de dados. 

    Depois de fazer esse upload e enviar para o banco, tenho outro form que tem um listbox, contemplando os dados do banco, inclusive tenho que deixar um campo nesse list view para exibir que seja um icone ou algum tipo de butom que quando eu clicar nele ele abra o arquivo .PDF. Esse list view servira como form de pesquisa, onde constara todos os dados dessa tabela do banco.

    Como faço para poder fazer o upload desse arquivo .PDF e enviar para o banco de dados e depois exibir ou criar um butom no list view pra poder abrir o .PDF correspondente do item que for pesquisar ?


    Philipe Khemil Said

    quinta-feira, 9 de junho de 2016 00:26

Respostas

  • Cria uma pasta no servidor e joga os pdfs nessa pasta e grava somente o nome do arquivo pdf no banco. Assim vc vai sobrecarregar menos o banco e o servidor.

    Existe um componente que é o AcroPDf ele esta vinculado ao adobe 9. o mesmo tem que estar instalado na maquina pra funcionar. 

    No mais vc pode usar o openfiledialog pra filtrar a busca e carregamento de somente arquivos .PDF.

    um exemplo.

                openFileDialog1.Filter = "Arquivos PDF *.pdf| *.pdf";
                DialogResult res = openFileDialog1.ShowDialog();
                if (res == DialogResult.OK)
                {
                    axAcroPDF1.LoadFile(openFileDialog1.FileName); // o componente que carrega o pdf no form
                    axAcroPDF1.setShowToolbar(false);

                 }

    Att, wsti.

    quinta-feira, 9 de junho de 2016 00:40
  • Vamos lá pra enviar pro servidor, vc precisa criar uma pasta. Fica ao seu criterio se vc vai fazer pro sistema criar a pasta pra vc e depois só verificar se a pasta existe ou vc vai criar na mão mesmo. As configurações dessa pasta dependem de como é o seu ambiente, se os usuarios da rede tem acesso ao server e podem apagar esta pasta que vc vai criar. não tenho como te orientar sobre isso pq não conheço seu ambiente.

    Quanto vc copiar os PDFs pro server é mole veja o exemplo abaixo.

     string paths = @"\\10.10.2.10\\SisHRio\\ImagensPdfs\";
                       
     string cnhm = dra.Cells[1].Value.ToString();
     string ghj = dra.Cells[0].Value.ToString();
     string CorretFilename = System.IO.Path.GetFileName(cnhm);
     openFileDialog1.FileName = dra.Cells[2].Value.ToString();
                        System.IO.File.Copy(openFileDialog1.FileName, paths + ghj); // o importante esta aqui. vc faz a copia pro caminho que é o paths  no exemplo estou passando o ip do server\nome da pasta\nome da pasta estou pegando os dados de um datagrid mas nada te impede de pegar o nome do arquivo de um textbox ou list 
    Att, wsti.

    quinta-feira, 9 de junho de 2016 01:22

Todas as Respostas

  • Cria uma pasta no servidor e joga os pdfs nessa pasta e grava somente o nome do arquivo pdf no banco. Assim vc vai sobrecarregar menos o banco e o servidor.

    Existe um componente que é o AcroPDf ele esta vinculado ao adobe 9. o mesmo tem que estar instalado na maquina pra funcionar. 

    No mais vc pode usar o openfiledialog pra filtrar a busca e carregamento de somente arquivos .PDF.

    um exemplo.

                openFileDialog1.Filter = "Arquivos PDF *.pdf| *.pdf";
                DialogResult res = openFileDialog1.ShowDialog();
                if (res == DialogResult.OK)
                {
                    axAcroPDF1.LoadFile(openFileDialog1.FileName); // o componente que carrega o pdf no form
                    axAcroPDF1.setShowToolbar(false);

                 }

    Att, wsti.

    quinta-feira, 9 de junho de 2016 00:40
  • Como seria um exemplo se fosse colocar os pdfs no servidor e fazer o select pelo nome dele ?

    abaixo tem o print  da tela.

    O codigo abaixo carrega a imagem para o imagelist , mas nao carrega nenhum outro tipo de extenção, por ex .PDF

    protected void CarregaImagem()
            {
                try
                {
                    this.openFileDialog1.ShowDialog(this);
                    string strFn = this.openFileDialog1.FileName;
    
                    if (string.IsNullOrEmpty(strFn))
                        return;
                    
                    this.picImagem.Image = Image.FromFile(strFn);
                    FileInfo arqImagem = new FileInfo(strFn);
                    tamanhoArquivoImagem = arqImagem.Length;
                    FileStream fs = new FileStream(strFn, FileMode.Open, FileAccess.Read, FileShare.Read);
                    vetorImagens = new byte[Convert.ToInt32(this.tamanhoArquivoImagem)];
                    int iBytesRead = fs.Read(vetorImagens, 0, Convert.ToInt32(this.tamanhoArquivoImagem));
                    fs.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    Como eu poderia fazer o mesmo mas para arquivo pdf? Acho que conseguiria fazer mais facil do que buscar no servidor pelo nome do arquivo. Pesquisei materiais na internet mas não consegui ter uma noção maior. Poderia me ajudar ? Esse é o item que mais esta travado, por eu não saber como fazer.


    Philipe Khemil Said

    quinta-feira, 9 de junho de 2016 01:04
  • Vamos lá pra enviar pro servidor, vc precisa criar uma pasta. Fica ao seu criterio se vc vai fazer pro sistema criar a pasta pra vc e depois só verificar se a pasta existe ou vc vai criar na mão mesmo. As configurações dessa pasta dependem de como é o seu ambiente, se os usuarios da rede tem acesso ao server e podem apagar esta pasta que vc vai criar. não tenho como te orientar sobre isso pq não conheço seu ambiente.

    Quanto vc copiar os PDFs pro server é mole veja o exemplo abaixo.

     string paths = @"\\10.10.2.10\\SisHRio\\ImagensPdfs\";
                       
     string cnhm = dra.Cells[1].Value.ToString();
     string ghj = dra.Cells[0].Value.ToString();
     string CorretFilename = System.IO.Path.GetFileName(cnhm);
     openFileDialog1.FileName = dra.Cells[2].Value.ToString();
                        System.IO.File.Copy(openFileDialog1.FileName, paths + ghj); // o importante esta aqui. vc faz a copia pro caminho que é o paths  no exemplo estou passando o ip do server\nome da pasta\nome da pasta estou pegando os dados de um datagrid mas nada te impede de pegar o nome do arquivo de um textbox ou list 
    Att, wsti.

    quinta-feira, 9 de junho de 2016 01:22
  • Uma pergunta, o codigo abaixo seria pra poder fazer o link do arquivo pdf com o item a qual pertence ? Pra saber com qual item do banco esse pdf pertence. 

    string cnhm = dra.Cells[1].Value.ToString(); string ghj = dra.Cells[0].Value.ToString();


    Philipe Khemil Said

    quinta-feira, 9 de junho de 2016 01:41
  • Consegui fazer carregar o arquivo, mas da o erro abaixo. Quando consegui criar a copia do arquivo na pasta, como faço pra definir o nome do arquivo PDF como o nome de alguma textbox que tenho, para poder servir como referencia


    Philipe Khemil Said

    quinta-feira, 9 de junho de 2016 02:08
  • Tirei o exemplo que te passei de um sistema que uso. 

    nele é feito o seguinte quando seleciono um pdf, jogo o nome do arquivo e a localização dele para este datagrid. assim posso selecionar mais de um pdf.  Ai quando realizo a gravação do nome do arquivo na minha tabela faço um foreach no datagrid e pego os dados das colunas. uma com o caminho do arquivo e outra com o nome do arquivo.

    Att, Wsti.

    quinta-feira, 9 de junho de 2016 02:36
  • Tentei fazer utilizando seu script, mudei os dados que vc colocou sobre seu datagrid e no meu coloquei dois Textbox, um com o ID e o outro com o nome, mas ai da erro na linha de código que postei imagem ai acima. Não tenho tanta experiencia em programação, essa parte do pdf nunca tentei fazer, estou com muitas duvidas. Como meu form não tem local nenhum pra colocar as informações sobre o PDF, como faço pra poder inserir o ID e a descrição como nome desse arquivo e enviar para a pasta selecionada ? Prq se faço assim, pegando o ID dele e a descrição, posso buscar ou fazer link com o banco de dados. Consegue me ajudar ?


    Philipe Khemil Said

    quinta-feira, 9 de junho de 2016 09:55
  • Tirei o exemplo que te passei de um sistema que uso. 

    nele é feito o seguinte quando seleciono um pdf, jogo o nome do arquivo e a localização dele para este datagrid. assim posso selecionar mais de um pdf.  Ai quando realizo a gravação do nome do arquivo na minha tabela faço um foreach no datagrid e pego os dados das colunas. uma com o caminho do arquivo e outra com o nome do arquivo.

    Att, Wsti.

    Wsti, boa tarde.

    Poderia passar seu email para que eu passa sanar algumas duvidas com você ?


    Philipe Khemil Said

    quinta-feira, 9 de junho de 2016 16:04