here is the code please help.. actually my motto is to display the image placed in other physical drive than the application. but I tried for the first time by placing the image in a folder named Virtual ,under the application root.but it also not working..
help plz.
-- VirtualFile.cs --
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level =AspNetHostingPermissionLevel.Minimal)]
public class MyVirtualFile : System.Web.Hosting.VirtualFile
{
private byte[] _content;
private MyVirtualPathProvider _provider;
public MyVirtualFile(string virtualPath, MyVirtualPathProvider provider) : base(virtualPath)
{
this._provider = provider;
if (VirtualPathUtility.GetExtension(virtualPath).ToLower() == ".jpg")
{
_content = File.ReadAllBytes(HttpContext.Current.Server.MapPath("~/Picture.jpg"));
else
{
_content = System.Text.ASCIIEncoding.ASCII.GetBytes("Other Content");
}
}
public override Stream Open()
{
MemoryStream stream = new MemoryStream(_content);
stream.Seek(0, SeekOrigin.Begin);
return stream;
}
}
-- VirtualDirectory.cs --
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level =AspNetHostingPermissionLevel.Minimal)]
public class MyVirtualDirectory : System.Web.Hosting.VirtualDirectory
{
private List<virtualfile> _files = new List<virtualfile>();
private List<virtualdirectory> _directories = new List<virtualdirectory>();
private ArrayList _children = new ArrayList();
public MyVirtualDirectory(string virtualDir, MyVirtualPathProvider provider) : base(virtualDir)
{
_files.Add(new MyVirtualFile("~/Virtual/File3.jpg", provider));
_files.Add(new MyVirtualFile("~/Virtual/File4.misc", provider));
_children.AddRange(_directories);
_children.AddRange(_files);
}
public override IEnumerable Children
{
get { return _children; }
}
public override IEnumerable Directories
{
get { return _directories; }
}
public override IEnumerable Files
{
get { return _files; }
}
}
-- VirtualPathProvider.cs --
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Medium)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.High)]
public class MyVirtualPathProvider : System.Web.Hosting.VirtualPathProvider
{
public MyVirtualPathProvider() : base()
{
}
protected override void Initialize()
{
}
private bool IsVirtualPath(string virtualPath)
{
String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
return checkPath.StartsWith("~/Virtual", StringComparison.InvariantCultureIgnoreCase);
}
public override bool FileExists(string virtualPath)
{
if (IsVirtualPath(virtualPath))
{
return true;
}
else
return Previous.FileExists(virtualPath);
}
public override bool DirectoryExists(string virtualDir)
{
if (IsVirtualPath(virtualDir))
{
return true;
}
else
return Previous.DirectoryExists(virtualDir);
}
public override System.Web.Hosting.VirtualFile GetFile(string virtualPath)
{
if (IsVirtualPath(virtualPath))
return new MyVirtualFile(virtualPath, this);
else
return Previous.GetFile(virtualPath);
}
public override System.Web.Hosting.VirtualDirectory GetDirectory(string virtualDir)
{
if (IsVirtualPath(virtualDir))
return new MyVirtualDirectory(virtualDir, this);
else
return Previous.GetDirectory(virtualDir);
}
public override CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies,DateTime utcStart)
{
return null;
}
}
in web.config
----------------
<httpHandlers>
<add path="*" verb="GET,HEAD,POST" type="System.Web.StaticFileHandler" validate="true" />
</httpHandlers>