Acessar arquivo fora da estrutura Web
Estou tentando acessar arquivo fora da estrutura Web e não consigo.
Para ativar o site, montei o diretório virtual assim: C:\NETNUCLEO\EFIGIE\LOGIN.ASPX
Dentro dessa estrutura eu consigo acessar qualquer arquivo, por exemplo um de imagem FOTO01.JPG.
Como estou montando sistema para acessar um banco gigante (2TB) de imagnes, os arquivos terão que ficar fora da estrutura raiz/padrão do sistema.
Como exemplo, esses ficarão em outro HD, ou seja, no diretório H:\FOTOS\FOTOS01.JPG
Mas quando tento acessar/mostrar esta imagem e colocar a propriedade ImageUrl = H:\FOTOS\FOTOS01.JPG simplesmente não mostra nada.
Existe alguma forma de acessar arquivos fora da estrutura padrão?
Osvaldo Júnior
Curtidas 0
Respostas
Joel Rodrigues
19/03/2012
Tente usar o Server.MapPah(caminho).
GOSTEI 0
Osvaldo Júnior
19/03/2012
O Server.MapPah() só enxerga dentro da pasta raiz.
GOSTEI 0
Joel Rodrigues
19/03/2012
É verdade, entendi mal o seu problema. Vou tentar buscar uma solução por aqui.
GOSTEI 0
Joel Rodrigues
19/03/2012
É verdade, entendi mal o seu problema. Vou tentar buscar uma solução por aqui.
GOSTEI 0
Osvaldo Júnior
19/03/2012
Consegui a solução em outro forum.
Autor: Rafael Cardoso (http://csharpbrasil.com.br/forum/asp-net/acessar-arquivoimagem-fora-da-estrutura-web/)
Para exibir você precisará fazer o seguinte. Primeiro crie um novo arquivo do tipo Generic Handler (extensão .ashx) e copie e cole o codigo abaixo.
<%@ WebHandler Language=C# class=exibi_imagem %>
using System;
using System.Web;
using System.IO;
public class exibi_imagem : IHttpHandler
{
private const string diretorioImagens = @H:\FOTOS\;
public void ProcessRequest (HttpContext context) {
string arquivo = context.Request.QueryString[arquivo];
string caminho = Path.Combine(diretorioImagens, arquivo);
System.Drawing.Image imagem = System.Drawing.Bitmap.FromFile(caminho);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
imagem.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
context.Response.BinaryWrite(ms.ToArray());
}
public bool IsReusable
{
get
{
return false;
}
}
}
O que ocorre nesse código é o seguinte. Uma QueryString chamada arquivo será passada para o arquivo. Dentro do arquivo temos uma constante apontando o diretorio das imagens. Concatenaremos ele ao nome do arquivo e abriremos a imagem para escrever no browser.
No seu codigo html utilizará assim:
<asp:Image ID=Image1 runat=server ImageUrl=exibi_imagem.ashx?arquivo=fotos01.jpg />
Autor: Rafael Cardoso (http://csharpbrasil.com.br/forum/asp-net/acessar-arquivoimagem-fora-da-estrutura-web/)
Para exibir você precisará fazer o seguinte. Primeiro crie um novo arquivo do tipo Generic Handler (extensão .ashx) e copie e cole o codigo abaixo.
<%@ WebHandler Language=C# class=exibi_imagem %>
using System;
using System.Web;
using System.IO;
public class exibi_imagem : IHttpHandler
{
private const string diretorioImagens = @H:\FOTOS\;
public void ProcessRequest (HttpContext context) {
string arquivo = context.Request.QueryString[arquivo];
string caminho = Path.Combine(diretorioImagens, arquivo);
System.Drawing.Image imagem = System.Drawing.Bitmap.FromFile(caminho);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
imagem.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
context.Response.BinaryWrite(ms.ToArray());
}
public bool IsReusable
{
get
{
return false;
}
}
}
O que ocorre nesse código é o seguinte. Uma QueryString chamada arquivo será passada para o arquivo. Dentro do arquivo temos uma constante apontando o diretorio das imagens. Concatenaremos ele ao nome do arquivo e abriremos a imagem para escrever no browser.
No seu codigo html utilizará assim:
<asp:Image ID=Image1 runat=server ImageUrl=exibi_imagem.ashx?arquivo=fotos01.jpg />
GOSTEI 0