Server.MapPath Problem

Hello Experts

I am trying to get a virtual path to a gif file I have in the root folder of my domain.

Using Server.MapPath("./Random.gif") I should get the path d/hosting/member/scafmars/site1/Random.gif.  

Instead I am getting file///d/hosting/member/scafmars/site1/Random.gif when I click Properties on the image on the page.

The file/// is causing the image to not appear on the page.

Can anyone tell me why I am getting the file/// preceding the path?


Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Kevin CrossChief Technology OfficerCommented:
Server.MapPath is getting you the physical path.  Why are you using that to display image, btw?  Why not just pass in "/Random.gif" or "~/Random.gif" to point to the root or URL or web application, respectively.
RichWAuthor Commented:
I'm doing image verification and I need a virtual path to the gif file to create the image on the web page.  

The code works on my home pc using XP pro, but on my domain site I'm getting an empty image control.

Gary DavisDir Internet SvcsCommented:
It will work on your local web server since the file// will find the local file. However on a remote web server, it will display the page and attempt to pull the file from your local PC.
Use the mappath to verify the image using the web server's file system (File.Exists()) but use the relative path to the image in the web page.
Gary Davis
HTML5 and CSS3 Fundamentals

Build a website from the ground up by first learning the fundamentals of HTML5 and CSS3, the two popular programming languages used to present content online. HTML deals with fonts, colors, graphics, and hyperlinks, while CSS describes how HTML elements are to be displayed.

hi, you have used the right sysntax.... can u please tell me the exact file location and path...


Sandip Mishra

RichWAuthor Commented:
I hear ya, but I can't use the relative path.  The code I'm using wants a virtual path.  When I use the relative path it doesn't work.
RichWAuthor Commented:
The path is d/hosting/member/scafmars/site1/Random.gif.  The image control on the page shows file///d/hosting/member/scafmars/site1/Random.gif  under properties.
As you want to display image in Webpage.
If you are using Image control and set its ImageUrl property. then don't use server.mappath for that. Actually ImageUrl should be virtual path not physical path. so use
Image1.ImageUrl = "~/Randon.gif";
If you want physical path then choose
string path  = Server.MapPath("~/Random.gif");
RichWAuthor Commented:
jinal, I have to pass the virtual path into a method of my class in order to create the image dynamically.
Hi! Try this one.

Server.MapPath(".") + @"\Random.gif"
Can you please explain detail of functionality ? or put some code .
RichWAuthor Commented:
jinal, the functon creates a new image and places a random text string on it to be used for verification when a user is registering on my site.  It's a simple verification procedure.  It works fine on my home pc.  I am simply trying to find out why Server.MapPath is not finding the image in the root folder where it most definitely is.

drypz, thanks for your suggestions, but it doesn't like that either.

Gary DavisDir Internet SvcsCommented:
Like I said, create the image in the folder within you website or virtual directory using the MapPath to determine its location but in the control to display the image, you have to use the web's location using relative or absolute location (src="Random.gif" or src=http://..../Random.gif).
To test, use the browser to locate the image you created directly.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
RichWAuthor Commented:
Here's the method I'm using.  

The call to this method is Dim salt As String = verify.CreateImage(Server.MapPath("./Random.gif"), 100, 200)

If you pass a relative path instead of using Server.MapPath, the height argument "Identifier Expected".

Server.MapPath works fine on my home PC.  The image on my domain account is there where the path says it is.  I just don't understand why the image is not being displayed when run from my domain.
Public Function CreateImage(ByVal path As String, ByVal height As Integer, ByVal width As Integer) As String
        'Creates a Random Gif file of provided width and height
        'the string on the gif file is rotated randomly
        'returns the random string painted
        Dim r As New Random 'to generate a random angle
        Dim salt As String = CreateSalt(4) 'generates a random string
        Dim bmp As New Bitmap(width, height, PixelFormat.Format24bppRgb) 'creates a 24bit bitmap in memory
        Dim g As Graphics = Graphics.FromImage(bmp)
        g.TextRenderingHint = TextRenderingHint.AntiAlias 'this will smoothen the Font
        g.Clear(Color.Black) 'this clears the background and paints specified color
        g.DrawRectangle(Pens.White, 1, 1, width - 3, height - 3)
        g.DrawRectangle(Pens.Black, 0, 0, width, height)
        Dim mymat As New System.Drawing.Drawing2D.Matrix 'matrix used for rotation        transformation()
        Dim i As Integer
        For i = 0 To Len(salt) - 1 'we will rotate each literal at a specified angle
            mymat.Reset()    ' matrix should be initialized to identity matrix
            mymat.RotateAt(r.Next(-30, 0), New PointF(width * (0.12 * i), height * 0.5))
            'rotate at any angle b/w -30 and 0
            g.Transform = mymat 'apply the transform
            g.DrawString(salt.Chars(i), New Font("Comic Sans MS", 10, FontStyle.Italic), SystemBrushes.ActiveCaptionText, width * (0.12 * i), height * 0.5) 'draw the text on our(image)
        bmp.Save(path, ImageFormat.Gif)   'save the gif at specified path and name
        g.Dispose() 'clean up
        bmp.Dispose() 'ok the mess is over
        Return salt 'return the string painted for verification
    End Function

Open in new window

RichWAuthor Commented:
Thanks gardavis.  I used Server.MapPath again, but later in my calling function I used image.ImageUrl = "Random.gif" and it worked.  
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today

From novice to tech pro — start learning today.