Array
(
)

Acessar arquivo fora da estrutura Web

Osvaldo Júnior
   - 19 mar 2012


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?

Joel Rodrigues
   - 19 mar 2012

Tente usar o Server.MapPah(caminho).

Osvaldo Júnior
   - 19 mar 2012

O Server.MapPah() só enxerga dentro da pasta raiz.

Joel Rodrigues
   - 19 mar 2012

É verdade, entendi mal o seu problema. Vou tentar buscar uma solução por aqui.

Joel Rodrigues
   - 19 mar 2012

É verdade, entendi mal o seu problema. Vou tentar buscar uma solução por aqui.

Osvaldo Júnior
   - 21 abr 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 />