Wrox Home  
Search P2P Archive for: Go

  Return to Index  

asp_web_howto thread: Upload without component


Message #1 by "Thom" <seeflash2002@h...> on Thu, 10 Oct 2002 12:55:31
Hello!

OK this is my problem:
Below it is a complete code for upload and check for image height, width
color depth and file name from http://www.4guysfromrolla.com.
I running a site and i want ppl to upload images but the images have to be 
in a specific range.
Example: the picture can't be more than 640 px width
Now to my problem:
In the code below there is functions that checks everything but how do i 
call these functions so i can get the values from the image when i post 
the uploadform?
At the end of the code below there is an example, but it only checks files 
from a specific folder, in this case c:\ and write out all the pictures 
values...

Many many thx if someone could help me!


<%

  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::                                                             :::
  ':::  This function gets a specified number of bytes from any    :::
  ':::  file, starting at the offset (base 1)                      :::
  ':::                                                             :::
  ':::  Passed:                                                    :::
  ':::       flnm        => Filespec of file to read               :::
  ':::       offset      => Offset at which to start reading       :::
  ':::       bytes       => How many bytes to read                 :::
  ':::                                                             :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  function GetBytes(flnm, offset, bytes)

     Dim objFSO
     Dim objFTemp
     Dim objTextStream
     Dim lngSize

     on error resume next

     Set objFSO = CreateObject("Scripting.FileSystemObject")
     
     ' First, we get the filesize
     Set objFTemp = objFSO.GetFile(flnm)
     lngSize = objFTemp.Size
     set objFTemp = nothing

     fsoForReading = 1
     Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)

     if offset > 0 then
        strBuff = objTextStream.Read(offset - 1)
     end if

     if bytes = -1 then		' Get All!

        GetBytes = objTextStream.Read(lngSize)  'ReadAll

     else

        GetBytes = objTextStream.Read(bytes)

     end if

     objTextStream.Close
     set objTextStream = nothing
     set objFSO = nothing

  end function


  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::                                                             :::
  ':::  Functions to convert two bytes to a numeric value (long)   :::
  ':::  (both little-endian and big-endian)                        :::
  ':::                                                             :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  function lngConvert(strTemp)
     lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 
256)))
  end function

  function lngConvert2(strTemp)
     lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 
256)))
  end function

  
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::                                                             :::
  ':::  This function does most of the real work. It will attempt  :::
  ':::  to read any file, regardless of the extension, and will    :::
  ':::  identify if it is a graphical image.                       :::
  ':::                                                             :::
  ':::  Passed:                                                    :::
  ':::       flnm        => Filespec of file to read               :::
  ':::       width       => width of image                         :::
  ':::       height      => height of image                        :::
  ':::       depth       => color depth (in number of colors)      :::
  ':::       strImageType=> type of image (e.g. GIF, BMP, etc.)    :::
  ':::                                                             :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  function gfxSpex(flnm, width, height, depth, strImageType)

     dim strPNG 
     dim strGIF
     dim strBMP
     dim strType
     strType = ""
     strImageType = "(unknown)"

     gfxSpex = False

     strPNG = chr(137) & chr(80) & chr(78)
     strGIF = "GIF"
     strBMP = chr(66) & chr(77)

     strType = GetBytes(flnm, 0, 3)

     if strType = strGIF then				' is GIF

        strImageType = "GIF"
        Width = lngConvert(GetBytes(flnm, 7, 2))
        Height = lngConvert(GetBytes(flnm, 9, 2))
        Depth = 2 ^ ((asc(GetBytes(flnm, 11, 1)) and 7) + 1)
        gfxSpex = True

     elseif left(strType, 2) = strBMP then		' is BMP

        strImageType = "BMP"
        Width = lngConvert(GetBytes(flnm, 19, 2))
        Height = lngConvert(GetBytes(flnm, 23, 2))
        Depth = 2 ^ (asc(GetBytes(flnm, 29, 1)))
        gfxSpex = True

     elseif strType = strPNG then			' Is PNG

        strImageType = "PNG"
        Width = lngConvert2(GetBytes(flnm, 19, 2))
        Height = lngConvert2(GetBytes(flnm, 23, 2))
        Depth = getBytes(flnm, 25, 2)

        select case asc(right(Depth,1))
           case 0
              Depth = 2 ^ (asc(left(Depth, 1)))
              gfxSpex = True
           case 2
              Depth = 2 ^ (asc(left(Depth, 1)) * 3)
              gfxSpex = True
           case 3
              Depth = 2 ^ (asc(left(Depth, 1)))  '8
              gfxSpex = True
           case 4
              Depth = 2 ^ (asc(left(Depth, 1)) * 2)
              gfxSpex = True
           case 6
              Depth = 2 ^ (asc(left(Depth, 1)) * 4)
              gfxSpex = True
           case else
              Depth = -1
        end select


     else

        strBuff = GetBytes(flnm, 0, -1)		' Get all bytes from file
        lngSize = len(strBuff)
        flgFound = 0

        strTarget = chr(255) & chr(216) & chr(255)
        flgFound = instr(strBuff, strTarget)

        if flgFound = 0 then
           exit function
        end if

        strImageType = "JPG"
        lngPos = flgFound + 2
        ExitLoop = false

        do while ExitLoop = False and lngPos < lngSize

           do while asc(mid(strBuff, lngPos, 1)) = 255 and lngPos < lngSize
              lngPos = lngPos + 1
           loop

           if asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, 
lngPos, 1)) > 195 then
              lngMarkerSize = lngConvert2(mid(strBuff, lngPos + 1, 2))
              lngPos = lngPos + lngMarkerSize  + 1
           else
              ExitLoop = True
           end if

       loop
       '
       if ExitLoop = False then

          Width = -1
          Height = -1
          Depth = -1

       else

          Height = lngConvert2(mid(strBuff, lngPos + 4, 2))
          Width = lngConvert2(mid(strBuff, lngPos + 6, 2))
          Depth = 2 ^ (asc(mid(strBuff, lngPos + 8, 1)) * 8)
          gfxSpex = True

       end if
                   
     end if

  end function



  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::     Test Harness                                              :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  
  ' To test, we'll just try to show all files with a .GIF extension in the 
root of C:

 ' Set objFSO = CreateObject("Scripting.FileSystemObject")
 ' Set objF = objFSO.GetFolder("c:\")
 ' Set objFC = objF.Files

 ' response.write "<table border=""0"" cellpadding=""5"">"

'  For Each f1 in objFC
'   if instr(ucase(f1.Name), ".GIF") then
'      response.write "<tr><td>" & f1.name & "</td><td>" & f1.DateCreated 
& "</td><td>" & f1.Size & "</td><td>"

'       if gfxSpex(f1.Path, w, h, c, strType) = true then
'          response.write w & " x " & h & " " & c & " colors"
'       else
'          response.write "&nbsp;"
'       end if

'       response.write "</td></tr>"

'    end if

'  Next

'  response.write "</table>"
	xxx = gfxSpex(strFlnm, lngWidth, lngHeight, lngDepth, 
strImageType) 
	Response.write xxx
  set objFC = nothing
  set objF = nothing
  set objFSO = nothing
 %>
Message #2 by "phil griffiths" <pgtips@m...> on Tue, 15 Oct 2002 15:58:21
Hi Thom,

I guess you have a standard HTML form with enctype set to "multipart/form-
data" and action set to your ASP page which does the uploading and saves 
the file to the server?

From the code you posted it looks like what you need to do next is 
something like this:

' declare some vars to hold the image attributes
Dim lngWidth, lngHeight, lngDepth, strImageType

' call the function to check the image
' (assumes strFlnm holds the full path to the uploaded image on your 
server)
If gfxSpex(strFlnm, lngWidth, lngHeight, lngDepth, strImageType) Then
    ' test image width
    If lngWidth > 640 Then
        ' code to handle image too big, e.g
        Response.Write "image too big"
    Else
        ' image size Ok - add any other tests you need
        Response.Write "image accepted"
    End If
Else
   ' code to handle invalid file type, e.g.
   Response.Write "you can only send image files."
End If

Is that the type of thing you're after?

Phil
>----------------------------------------------------
> Hello!

> OK this is my problem:
B> elow it is a complete code for upload and check for image height, width
c> olor depth and file name from http://www.4guysfromrolla.com.
I>  running a site and i want ppl to upload images but the images have to 
be 
i> n a specific range.
E> xample: the picture can't be more than 640 px width
N> ow to my problem:
I> n the code below there is functions that checks everything but how do i 
c> all these functions so i can get the values from the image when i post 
t> he uploadform?
A> t the end of the code below there is an example, but it only checks 
files 
f> rom a specific folder, in this case c:\ and write out all the pictures 
v> alues...

> Many many thx if someone could help me!
...
>
Message #3 by "Thom" <seeflash2002@h...> on Sun, 20 Oct 2002 13:52:30
Thank you very much!


> Hi Thom,

> I guess you have a standard HTML form with enctype set 
to "multipart/form-
d> ata" and action set to your ASP page which does the uploading and saves 
t> he file to the server?

> From the code you posted it looks like what you need to do next is 
s> omething like this:

> ' declare some vars to hold the image attributes
D> im lngWidth, lngHeight, lngDepth, strImageType

> ' call the function to check the image
'>  (assumes strFlnm holds the full path to the uploaded image on your 
s> erver)
I> f gfxSpex(strFlnm, lngWidth, lngHeight, lngDepth, strImageType) Then
 >    ' test image width
 >    If lngWidth > 640 Then
 >        ' code to handle image too big, e.g
 >        Response.Write "image too big"
 >    Else
 >        ' image size Ok - add any other tests you need
 >        Response.Write "image accepted"
 >    End If
E> lse
 >   ' code to handle invalid file type, e.g.
 >   Response.Write "you can only send image files."
E> nd If

> Is that the type of thing you're after?

> Phil
>> ----------------------------------------------------
>>  Hello!

> > OK this is my problem:
B> > elow it is a complete code for upload and check for image height, 
width
c> > olor depth and file name from http://www.4guysfromrolla.com.
I> >  running a site and i want ppl to upload images but the images have 
to 
b> e 
i> > n a specific range.
E> > xample: the picture can't be more than 640 px width
N> > ow to my problem:
I> > n the code below there is functions that checks everything but how do 
i 
c> > all these functions so i can get the values from the image when i 
post 
t> > he uploadform?
A> > t the end of the code below there is an example, but it only checks 
f> iles 
f> > rom a specific folder, in this case c:\ and write out all the 
pictures 
v> > alues...

> > Many many thx if someone could help me!
.> ..
>

  Return to Index