Erro salvando link de um aquivo no banco de dados sql server
- 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
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- EditadoHarley AraujoMSFT, Moderadorquinta-feira, 5 de novembro de 2009 13:09Conteúdo inadequado.
- Marcado como RespostaPaulo Medeiros quinta-feira, 5 de novembro de 2009 13:00
Todas as Respostas
- 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.
- 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.
- POR FAVOR SERA QUE ALGUEM PODE ME AJUDAR... JA TENTEI DE VARIAS FORMA E NÃO FUNCIONA NO PROVEDOR, APENAS LOCALMENTE...
DESDE JA AOBRIGADO - Isso ponha para salvar sempre nesse caminho, eu não entendi pq vc quer salvar o caminho do client no servidor?
- 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 - 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;
}
}
} 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- EditadoHarley AraujoMSFT, Moderadorquinta-feira, 5 de novembro de 2009 13:09Conteúdo inadequado.
- Marcado como RespostaPaulo Medeiros quinta-feira, 5 de novembro de 2009 13:00
- 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 ? - 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. - 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.. 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

