Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brissolare

Trabalhando com imagens

Recommended Posts

Boa tarde a todos!

 

Preciso trabalhar com upload de imagens no asp.net com C#

 

Estou com os seguintes problemas...adicionar a imagem no banco é fácil..o problema é que fica pesado..entao quero colocar somente o caminho no banco e no img do asp.net colocar o caminho...

 

1. Não consigo jogar a imagem do computador local para a pasta definida do servidor!

2. Preciso identificar o tamanho e formato da imagem e também altura e largura e delimitar isso...

 

3. Preciso mostrar a imagem que eu estou colocando antes na tela para depois confirmar..como nao jogo no banco...nao consigo fazer aparecer....

 

 

Espero que tenham entendido...

 

Obrigado

Abraços!

brissolare

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Bruno!!

 

O tópico nao ajudou muito pq os outros links estao quebrados...

 

fiz o seguinte

 

if (FileUpload1.HasFile)
		{
			try
			{
				FileUpload1.SaveAs("C:\\Inetpub\\wwwroot\\site\\imgbanco\\" + FileUpload1.FileName);
				Label.Text = string.Format("File: {0} {1} kb - Content Type {2} ",
				FileUpload1.PostedFile.FileName, FileUpload1.PostedFile.ContentLength,
				FileUpload1.PostedFile.ContentType);


				string campo = "~/imgbanco/" + FileUpload1.FileName;

				ImageButton1.ImageUrl = campo;

			}
			catch (Exception ex)
			{
				Label.Text = "ERRO: " + ex.Message.ToString();
			}
		}
		else
		{
			Label.Text = "Você deve escolher um arquivo para o upload.";
		}

Ele carrega a imagem e mostra na tela...

 

O problema é o seguinte...........preciso que a imagem seja jpg somente e o tamnho seja 400x400

 

Outra coisa....

 

essa imagem está em um diretorio...se eu digital localhost/imgbanco/imagem.jpg ela aparece no browser...

 

essa imagem nao pode aparecer dessa forma...tem como bloquear??

 

obrigado

abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para bloquear, vou dar um chute, espero ajudar ;D

No global.asax existe um evento chamado Application_BeginRequest, toda requisição HTTP passa por este evento. Sabendo isso, o que você pode fazer dentro dele é verificar se a URL chamado corresponde ao da pasta que você quer bloquear, se sim, você da um this.Request.End().

Para pegar a URL você pode usar this.Request.Url.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Oenning,

 

Não consegui fazer não...meu problema é que são imagens que são confidencias, e não podemos mostrar de forma alguma a nao ser para pessoa.

 

Acho melhor que colocar em uma pasta é jogar para o banco de dados mesmo....pois assim estarei protegido por usuarios e senha do banco e as imagens nao estarao disponíveis de forma fácil...

 

O que estou pensando aqui é o seguinte: Se eu colocar a tabela de imagens junto com o banco principal vai carregar muito..estou pensando fazer o seguinte:

 

BANCO 1 INFORMACOES E GERAIS E TUDO MAIS

BANCO 2 IMAGENS

 

O QUE VCS ACHAM?

 

Obrigado

 

Brissolare

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Bruno! falei com a galera!! ai acho que está por minha conta e risco...rsrsrs...o banco é o mais seguro, pois na pior das hipoteses se houver uma cópia do disco ninguem pega as imagens...está no banco e terá que conseguir usuario e senha....

 

E também não são mais que 1 milhão de imagens(hehehehe)....

 

Agora estou tendo uma dificuldade tremenda para trabalhar com imagens no asp.net como nunca aconteceu com outra coisa....

 

Preciso de duas dicas...

 

Primiero selecionar a imagem pelo fileupload..ai quero mostrar em uma img pois quero confirmar a mensagem.... ai quero confirmar e jogar pro banco...preciso

Preciso dimencionar a imagem para 120x120...

 

Desculpe insistencia....estou com vários tópicos aqui......mas não estou conseguindo entender esse esquema mesmo...já fiz de tudo rapaz!

 

Dessa vez estou precisando muito mesmo......obrigado

 

dá uma olhada no codigo que estou fazendo para carregar a imagem no img do asp.net

 

if (flupfoto.HasFile)
		{
			try
			{
				Image2.ImageUrl = flupfoto.PostedFile.FileName.ToString();

			}
			catch (Exception ex)
			{
				Label.Text = "ERRO: " + ex.Message.ToString();
			}
		}
		else
		{
			Label.Text = "Você deve escolher um arquivo para o upload.";
		}

O img tem um icone de um rosto..quando eu clico no botao gravar ele some o icone e nao aparece a foto nova

Problema é que some o img...e nao aparece nada

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com este código:

 

BinaryReader bReader = new BinaryReader(fupFoto.PostedFile.InputStream);
byte[] photoByte = bReader.ReadBytes(fupFoto.PostedFile.ContentLength);;
Response.BinaryWrite(photoByte);

Acredito que consiga mostrar a imagem.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com este código:

 

BinaryReader bReader = new BinaryReader(fupFoto.PostedFile.InputStream);
byte[] photoByte = bReader.ReadBytes(fupFoto.PostedFile.ContentLength);;
Response.BinaryWrite(photoByte);

Acredito que consiga mostrar a imagem.

 

Abraços...

Apareceu isso no browser

 

ExifII* (2i SONYDSC-W55HH2008:09:05 10:20:03PrintIM0300nv"'d0221~ O |0100 2008:09:05 10:20:032008:09:05 10:20:03 0? SONY DSC " l@ABCDEFGHIJKL|MNz(f ( . N Pj Standard ^u'pP9A[Lp}J]00[pp0Tp0[pC,@/ppKpKp8p8pފiy@^gl#Q]@ܽQL{gabT2(V$piKutE>E[JH$R`O#GG**qGGO88G}9>|V4'G/I

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Pessoal,

 

Consegui fazer o que precisava, não está da forma como queria ainda, mas é um bom avanço comparado com o que estava antes...Agora estou com o seguinte problema:

 

Quando tento atualizar a imagem acontece o seguinte:

 

The process cannot access the file 'C:\Inetpub\wwwroot\site\tdirectory\001\002\vdirectory\5-15062009.jpg' because it is being used by another process.

 

Explicação: Eu estou tentando atualizar a imagem por outra, sendo assim, ele mante o nome da imagem e somente substitue os arquivos e no site já acontece a atualização no postback da pagina.

 

Esse problema acontece somente quando eu acesso o site via localhost/diretorios, quando eu executo pelo visual studio (ctrl+f5) ele deixa atualizar a foto normalmente....

 

Algume sabe o que pode ser?

 

 

Segue abaixo código caso interesse para alguem....na verdade eu queria fazer a visualização da imagem antes de jogar no servidor, mas está complicado...estou tendo dificuldades...deixa esse esquema para uma versão 2.0 dessa pagina...hehehehe

 

Botão 1 que atualiza a foto e salva o caminho no banco de dados

 

try
			{
				string nomearquivover = flupfoto0.FileName;
				//caminhoparaimagensrostos
				string nomearquivosalvar = lblidpaciente.Text + "-" + DateTime.Now.ToString("ddMMyyyy");
				flupfoto0.SaveAs("C:\\Inetpub\\wwwroot\\site\\tdirectory\\001\\002\\vdirectory\\" + nomearquivosalvar + ".jpg");

				System.Drawing.Image imagem;
				System.Drawing.Image thumb;

				imagem = System.Drawing.Image.FromFile("C:\\Inetpub\\wwwroot\\site\\tdirectory\\001\\002\\vdirectory\\" + nomearquivosalvar + ".jpg");

				//Aqui é feita a renderização proporcional da altura da imagem
				//tomando por base que o largura final dela é de 50px;
				int width = 180;
				int height;
				height = (int)(width * imagem.Height) / imagem.Width;

				//Gera a nova imagem reduzida
				thumb = imagem.GetThumbnailImage(width, height, null, System.IntPtr.Zero);

				//Salva a imagem
				thumb.Save("C:\\Inetpub\\wwwroot\\site\\tdirectory\\001\\002\\vdirectory\\view\\" + nomearquivosalvar + "t.jpg");

				string campo = "~/tdirectory/001/002/vdirectory/view/" + nomearquivosalvar + "t.jpg";
				lblcaminho.Text = campo;

				Image2.ImageUrl = campo;

				btnaddfoto.Visible = false;
				btnaltera.Visible = true;

				string strConexao = @"server=localhost;database=dados;uid=dados;pwd=1;";
				string sSql = "Update clientes set foto='" + campo + "' where codigo='" + lblidpaciente.Text + "'";
				using (MySqlConnection conn = new MySqlConnection(strConexao))
				{


					MySqlCommand cmd = new MySqlCommand(sSql, conn);

					try
					{
						conn.Open();

						int i = cmd.ExecuteNonQuery();

						if (i > 0)
						{
							Image1.ImageUrl = campo;
							pnlfoto.Visible = false;
							
						}
						else
						{
							lblmessage.Text = "Erro ao inserir o registro";
						}
					}
					catch (MySqlException ex)
					{
						lblmessage.Text = "   Atenção: " + ex.Message + ". Entre em contato com suporte!";
					}
					catch (InvalidOperationException ex)
					{
						lblmessage.Text = "   Atenção: " + ex.Message + "	 ";

					}
					catch (Exception ex)
					{
						lblmessage.Text = "   Atenção: " + ex.Message + "	 ";
					}
				}




			}
			catch (Exception ex)
			{

			}
		}
		else
		{
		}

Até aqui ocorre tudo normal

 

Agora que vem o problema

 

Botão 2, atualização do arquivo de imagem

 

if (flupfoto.HasFile)
		{
			try
			{

				string nomearquivover = flupfoto0.FileName;
				//caminhoparaimagensrostos
				string nomearquivosalvartump = lblcaminho.Text.Remove(0, 1);
				string nomearquivosalvargrande = nomearquivosalvartump.Replace("t.jpg", ".jpg");
				string nomearquivosalvargrandeok = nomearquivosalvargrande.Replace("view/","");

				flupfoto.SaveAs("C:\\Inetpub\\wwwroot\\site\\" + nomearquivosalvargrandeok);

				System.Drawing.Image imagem;
				System.Drawing.Image thumb;

				imagem = System.Drawing.Image.FromFile("C:\\Inetpub\\wwwroot\\site\\" + nomearquivosalvargrandeok);

				//Aqui é feita a renderização proporcional da altura da imagem
				//tomando por base que o largura final dela é de 50px;
				int width = 180;
				int height;
				height = (int)(width * imagem.Height) / imagem.Width;

				//Gera a nova imagem reduzida
				thumb = imagem.GetThumbnailImage(width, height, null, System.IntPtr.Zero);

				//Salva a imagem
				thumb.Save("C:\\Inetpub\\wwwroot\\site\\" + nomearquivosalvartump);


				string campo = lblcaminho.Text;

				Image2.ImageUrl = campo;

				pnlaterafoto.Visible = false;


			 
			 

			}
			catch (Exception ex)
			{
				Response.Write(ex.Message);
			}
		}
		else
		{
		}

Como falei quando executo esse codigo pelo visualstudio sem acessar localhost antes...ele deixa alterar...agora quando acesso localhost/site... Ai dá aquela mensagem de erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para bloquear, vou dar um chute, espero ajudar ;D

No global.asax existe um evento chamado Application_BeginRequest, toda requisição HTTP passa por este evento. Sabendo isso, o que você pode fazer dentro dele é verificar se a URL chamado corresponde ao da pasta que você quer bloquear, se sim, você da um this.Request.End().

Para pegar a URL você pode usar this.Request.Url.

 

Boa tarde Oenning,

 

Você poderia me esclarecer mais isso...não consegui entender...

 

Outra opção que pensei é a seguinte:

 

Coloco a pasta de imagens fora do diretorio virtual... e acesso ela via o caminho do link....tem como?

 

Na verdade estou tentando fazer dessa forma que falei, mas ele nao mostra no componente...via browser mostra, ex:

 

Eu digito no browser file:///C:/tinverno.jpg abre o arquivo...

 

Agora eu jogo img1.ImageUrl = file:///C:/tinverno.jpg ai não vai...

 

Tem como resolver isso...pois ai a pasta fica protegida, pois o acesso fica somente via o site..

 

Caso contrário esse primeiro modo que você falou como deve proceder na programação...minha dúvida é se eu bloquear a requisição, como irei acessa-lá via site...não estará bloqueada tbm?

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade agora que eu vi que minha solução também não resolve. O que eu ia dizer era para criar uma página aspx que recebe por parâmetro o nome da imagem e mostra na tela.

Mas seria fácil burlar, o usuário teria acesso a todas as imagens da mesma forma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade agora que eu vi que minha solução também não resolve. O que eu ia dizer era para criar uma página aspx que recebe por parâmetro o nome da imagem e mostra na tela.

Mas seria fácil burlar, o usuário teria acesso a todas as imagens da mesma forma.

Estou fazendo um esquema bem legal..acho que consiguirei acessar imagens do disco local fora da pasta virtual...assim que conseguir posto aqui...vai ser interessante para todos...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai conseguir puxar um arquivo fora da pasta virtual eu acho, mas vai precisar de permissão.

Mas assim, de alguma forma você vai mostrar essa imagem para o usuário pelo browser né? E para fazer isso, você vai precisar de um link. E se o usuário tem o link da image, ele tem acesso a ela que era o que você não queria. Bem complexo isso :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai conseguir puxar um arquivo fora da pasta virtual eu acho, mas vai precisar de permissão.

Mas assim, de alguma forma você vai mostrar essa imagem para o usuário pelo browser né? E para fazer isso, você vai precisar de um link. E se o usuário tem o link da image, ele tem acesso a ela que era o que você não queria. Bem complexo isso :P

 

É meu caro!

 

O negócio é bem complicado.....na verdade a imagem vai estar em outro diretorio no servidor e nao no micro do cliente...o que me deixa com mais problemas ainda....

 

Peguei um codigo que faz criar um objeto de imagem de um arquivo em outro diretorio e joga no site...mas até agora nao tive tempo de verificar...assim que conseguir posto aqui..

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.