Click here to Skip to main content
15,885,767 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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;
      }
} 
XML
in web.config
----------------
<httpHandlers>
 <add path="*" verb="GET,HEAD,POST" type="System.Web.StaticFileHandler" validate="true" />
</httpHandlers>
Posted
Updated 15-Apr-12 20:13pm
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900