Microsoft Developer Network > Página Inicial dos Fóruns > Fóruns do Web Development > ASP .NET > Erro salvando link de um aquivo no banco de dados sql server
Fazer uma PerguntaFazer uma Pergunta
 

RespondidoErro salvando link de um aquivo no banco de dados sql server

  • terça-feira, 3 de novembro de 2009 19:37Paulo Medeiros Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Estou usando a seguinte linha de codigo para salvar o caminho de um arquivo numa tabela do banco de dados sql server 2005:

        protected void FormView1_ItemInserting(Object sender, FormViewInsertEventArgs e)
        {
            Label lbResultado = (Label)FormView1.FindControl("lbResultado");
            FileUpload FileUpload1 = (FileUpload)FormView1.FindControl("FileUpload1");
            TextBox LINK_RG = (TextBox)FormView1.FindControl("LINK_RG");
           

            if (FileUpload1.PostedFile.ContentLength > 0)
            {
                try
                {
                    string destino = MapPath("~/Administracao/Upload/RelatorioG/");
                    string fn = Path.GetFileName(FileUpload1.PostedFile.FileName);
                    FileUpload1.PostedFile.SaveAs(destino + fn);
                    lbResultado.Text = "Arquivo enviado com sucesso!";
                    e.Values["LINK_RG"] = "~/Administracao/Upload/RelatorioG/" + fn.ToString();
                    //---
                   
                }
                catch (Exception ex)
                {
                    lbResultado.Text = ex.Message;
                }
            }

        }


    O problema e que quando executo a pagina pelo Visual Studio 2008 (localmente) o link e salvo na tabela sem problema, mas quando executo a pagina no meu provedor, nesse caso o caminho acho que é diferente então salva em branco o caminho no banco de dados, não sei então como deve ficar a minha linha de codigo, sera que alguem pode me ajudar ?

    Obs: o caminho fisico que esta informando no meu provedor aonde salvo meus arquivos da pagina esta indicando esse caminho:
    Caminho Físico (path)
    e:\home\isotec-eng\Web

    Desde ja agradeço quem puder me ajudar.

Respostas

  • quinta-feira, 5 de novembro de 2009 3:53Dennes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido

    Oi,

    O código parece certo e se funciona na sua máquina e não funciona no provedor é mais um sinal de que deveria funcionar.

    Perguntas :

    1) A pasta onde o upload será gravado precisa de permissões especiais no IIS, você pediu ao provedor para configurar essas opções ? Caso contrário, isso poderia fazer realmente o campo com o caminho ficar em branco.

    2) O campo fica totalmente vazio ou fica apenas com "~/Administracao/Upload/RelatorioG/" ?

    Sugiro o seguinte :

    1) Espalhe algumas instruções trace.warn no seu código, especialmente no catch, antes e após o saveas, após o e.Values

    2) Na mensagem que colocará nas instruções trace.warn, concatene informações importantes (como o nome do arquivo, por exemplo).

    3) No web.config, habilite o sistema de trace : <trace enabled="true" pageOutput="false" requestLimit="30" />

    4) Faça uma execução do upload.

    5) Chame o link http://seusite/suaaplicacao/trace.axd (ou http://seusite/trace.axd se sua aplicação estiver na raiz)

    6) Analise as informações de trace para descobrir mais detalhes sobre o erro.

    []'s
    Dennes
    http://twitter.com/Dennes


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp

Todas as Respostas

  • quarta-feira, 4 de novembro de 2009 11:40Seilor Bonancio Junior Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Olá, se o caminho sempre for mesmo, sete ele logicamente ~/Directory/Data para salvar sempre no mesmo local, coloque ele dentro do seu webconfig que fica mais bonito.
  • quarta-feira, 4 de novembro de 2009 12:43Paulo Medeiros Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    De acordo com o meu caminho fisico como fica então ? Quando entro via FTP apenas aparece o diretorio Web/os arquivos do meu site.

    Index de /Web/
                
                   Administracao/Upload/RelatorioG/


    Fico no aguardo.

  • quarta-feira, 4 de novembro de 2009 19:24Paulo Medeiros Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    POR FAVOR SERA QUE ALGUEM PODE ME AJUDAR... JA TENTEI DE VARIAS FORMA E NÃO FUNCIONA NO PROVEDOR, APENAS LOCALMENTE...
    DESDE JA AOBRIGADO
  • quarta-feira, 4 de novembro de 2009 19:31Seilor Bonancio Junior Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Isso ponha para salvar sempre nesse caminho, eu não entendi pq vc quer salvar o caminho do client no servidor?
  • quarta-feira, 4 de novembro de 2009 22:33Roberto O Santos Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Olá Paulo,

    No meu caso, ao desenvolver um sistema com upload de arquivos, no web.config adiciono o diretorio raiz do sistema.

    Ex.:

    <?xml version="1.0"?>
    <configuration>
    <appSettings>
    <add key="ApplicationRoot" value="C:\ServidorX\SiteY\WebRoot\"/>
    </appSettings>
    </configuration>
    Depois na aplicação basta utilizar o ConfigurationManager.AppSettings["ApplicationRoot"] para recuperar o valor da raiz.

    Ex.:

    ...
    
    System.IO.DirectoryInfo directory =
    new System.IO.DirectoryInfo(String.Format(@"{0}images\{1}",
    ConfigurationManager.AppSettings["ApplicationRoot"],
    User.ID));
    
    ...
    

    Depois no banco, grave somente o endereço a partir da raiz até a seu arquivo.

    Ex.:

    Images/UsuarioX/foto1.jpg


    Roberto Santos http://blog.robertoosantos.com
  • quarta-feira, 4 de novembro de 2009 23:49Paulo Medeiros Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Desculpe pessoal mas eu não estou conseguindo entender... so quero que meu link na tabela funciona..sera que no visual studio 2008 é tão complicado assim ?
    Meus arquivos do meu site que esta na locaweb esta dentro de um diretorio com o nome Web e dentro desse diretorio tem os arquivos do meu site ficando dessa forma
    web/administracao/Upload/RelatorioG/

    localmente eu não uso a pasta web ja que não existe então eu coloco apenas ~/administracao/Upload/RelatorioG/ e funciona perfeitamente, mas no provedor  link é gravado em branco, ja tentei dessas 2 formas
    1) ~/administracao/Upload/RelatorioG/
    2) ~/Web/Administracao/Upload/RelatorioG/

    Mas ambas não funcionam...
    Então se alguem pude me passar a linha de codigo que grave o link na minha tabela eu agradeço muito..
    Segue abaixo a linha de codigo que estou usando para gravar o link:

        protected void FormView1_ItemInserting(Object sender, FormViewInsertEventArgs e)
        {
            Label lbResultado = (Label)FormView1.FindControl("lbResultado");
            FileUpload FileUpload1 = (FileUpload)FormView1.FindControl("FileUpload1");
            TextBox LINK_RG = (TextBox)FormView1.FindControl("LINK_RG");
            DropDownList DropDownListANO = (DropDownList)FormView1.FindControl("DropDownListANO");
            DropDownList DropDownListMES = (DropDownList)FormView1.FindControl("DropDownListMES");

            VARANO = DropDownListANO.Text;
            VARMES = DropDownListMES.Text;

            if (FileUpload1.PostedFile.ContentLength > 0)
            {
                try
                {
                    string destino = MapPath("~/Administracao/Upload/RelatorioG/");
                    string fn = Path.GetFileName(FileUpload1.PostedFile.FileName);
                    FileUpload1.PostedFile.SaveAs(destino + fn);
                    lbResultado.Text = "Arquivo enviado com sucesso!";
                    e.Values["LINK_RG"] = "~/Administracao/Upload/RelatorioG/" + fn.ToString();
                    //---
                   
                }
                catch (Exception ex)
                {
                    lbResultado.Text = ex.Message;
                }
            }

        }
  • quinta-feira, 5 de novembro de 2009 3:53Dennes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido

    Oi,

    O código parece certo e se funciona na sua máquina e não funciona no provedor é mais um sinal de que deveria funcionar.

    Perguntas :

    1) A pasta onde o upload será gravado precisa de permissões especiais no IIS, você pediu ao provedor para configurar essas opções ? Caso contrário, isso poderia fazer realmente o campo com o caminho ficar em branco.

    2) O campo fica totalmente vazio ou fica apenas com "~/Administracao/Upload/RelatorioG/" ?

    Sugiro o seguinte :

    1) Espalhe algumas instruções trace.warn no seu código, especialmente no catch, antes e após o saveas, após o e.Values

    2) Na mensagem que colocará nas instruções trace.warn, concatene informações importantes (como o nome do arquivo, por exemplo).

    3) No web.config, habilite o sistema de trace : <trace enabled="true" pageOutput="false" requestLimit="30" />

    4) Faça uma execução do upload.

    5) Chame o link http://seusite/suaaplicacao/trace.axd (ou http://seusite/trace.axd se sua aplicação estiver na raiz)

    6) Analise as informações de trace para descobrir mais detalhes sobre o erro.

    []'s
    Dennes
    http://twitter.com/Dennes


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
  • quinta-feira, 5 de novembro de 2009 11:12Paulo Medeiros Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Bom dia

    O campo LINK_RG o qual gravo o caminho do meu arquivo que e enviado para a pasta fica em branco quando envio o arquivo pelo site. Mas quando eu envio localmente o caminho é gravado normalmente ficando dessa forma no campo LINK_RG.

    ~/Administracao/Upload/RelatorioG/RELATÓRIO GERENCIAL DE ABRIL2009 - C.C. 916.pdf

    O que eu acho bem estranho é que o arquivo é enviado normalmente para a pasta no site, mas não grava o caminho no campo LINK_RG ficando em branco e nesse caso não tem como abrir o arquivo ja que não tem o link.

    Obs: Se eu envio o arquivo localmente ele grava o caminho no campo conforme ja foi informado e o link tambem funciona no provedor
    exemplo:

    http://www.isotec-eng.com.br/Administracao/Upload/RelatorioG/RELAT%C3%93RIO%20GERENCIAL%20DE%20ABRIL2009%20-%20C.C.%20918.pdf

    Resumindo então...o meu problema e gravar o caminho do meu arquivo na tabela RG_LINK quando meu arquivo é enviado pelo meu site.
    Sera que alguem pode me ajudar ?
  • quinta-feira, 5 de novembro de 2009 11:35Seilor Bonancio Junior Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Paulo,

    Uma dica já que vc está tendo problemas.

    Já que todos os arquivos são salvos no mesmo diretório, pq vc não salva somente o nome do arquivo?

    Acho que ficaria mais fácil para vc ae no seu webconfig vc cria uma key para o caminho e sempre busca ela.
  • quinta-feira, 5 de novembro de 2009 12:59Paulo Medeiros Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    VALEU DENNES EU VERIFIQUEI O ITEM
    1) A pasta onde o upload será gravado precisa de permissões especiais no IIS, você pediu ao provedor para configurar essas opções ? Caso contrário, isso poderia fazer realmente o campo com o caminho ficar em branco.

    CONFIGUREI A ESCRITA NA MINHA PASTA E AGORA ESTA DANDO CERTO O LINK..

    MUITO OBRIGADO..
  • quinta-feira, 5 de novembro de 2009 13:51Dennes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Oi, Paulo,

    Conseguiu fazer o trace seguindo o passo-a-passo que indiquei ?

    Surgiram novas pistas ? Por onde ele passou ? Os valores estavam certos quando passou nos locais mais importantes ?


    []'s
    Dennes
    http://twitter.com/Dennes

    * Treinamento C# e Framework .NET c/OO dia  07/11 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    * Treinamento de ASP.NET 3.5 no RJ dia 16/11 - Apenas 12x R$ 60,48 - Inscreva-se em http://www.bufaloinfo.com.br/descontoaspnetantecipado.asp

    Tel : (11) 3170-3056 (21)9240-5134 E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp