views:

167

answers:

3
+1  Q: 

Multiple Uploads

hey I need the help with the following. I have a website, altough I was not a 100% programmer, I am trying to navigate within the programming of the site. It work in asp.net 2.0.

I have an image gallery, but the only problem is that I can only upload 1 image at a time. I need some help how i can integrate multiple images on the site.

below is the coding for album.asp

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!-- #INCLUDE file="inc/settings.asp" -->
<!-- #INCLUDE file="inc/functions.asp" -->
<!-- #INCLUDE file="inc/db_connect.asp" -->
<!-- #INCLUDE file="inc/check_login.asp" -->
<!--#INCLUDE file="fckeditor/fckeditor.asp" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml"&gt;
<head>
<script type="text/javascript" src="js/script.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Xaghra Scouts</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
<%
cat = decrypt(request("cat") & "")
set fs=Server.CreateObject("Scripting.FileSystemObject")
isSub = true
%>
</head>
<body>
<!-- #INCLUDE file="layout_top.asp" -->
<%if loggedin then%>
<table align="center" border="0" cellspacing="0" cellpadding="5" class="main">
  <tr >
    <td align="center" style="padding:15px;" colspan="2">
      <form action="album.asp" method="post" id="selectCategory">
      <b>SELECT CATEGORY:&nbsp;</b>
      <select name="cat" style="font-size:12px; width:160px; height:19px;" onChange="javascript: document.getElementById('selectCategory').submit();">
        <option selected>Uncategorized</option>
        <%
        set fo=fs.GetFolder(Server.MapPath("images/gallery"))
        for each x in fo.SubFolders
         Response.write("<option  value='" & encrypt(x.Name) & "'")
         if cat = x.Name then 
          response.write("selected")
         end if 
         Response.write(">" & x.Name & "</option>")
        next
       %>
      </select>
      </form>
    </td>
  </tr>
  <tr style="color:#666666; font-size:12px;">
    <td colspan="2" align="left">
     <br>
      <%
      if cat <> "" and  fs.FolderExists(Server.MapPath("images/gallery/" & cat)) then
       set fo=fs.GetFolder(Server.MapPath("images/gallery/" & cat))
       path = "gallery/" & cat
      else
       set fo=fs.GetFolder(Server.MapPath("images/gallery"))
       path = "gallery"
      end if

      for each file in fo.files
       if right(lcase(file.Name),3) = "jpg" then%>
        <div style="height:120px; width:160px; text-align:center; float:left;"><img src="thumbnail.aspx?picture=<%=server.URLEncode("images/" & path & "/" & file.Name)%>&maxWidth=160&maxHeight=100" style="border:1px solid #ffffff;"><br>
          <a onClick="javascript:ConfirmChoice('Are you sure you wish to delete this picture?','delete_image.asp?cat=<%=encrypt(cat)%>&file=<%=Server.URLEncode("images/" & path  & "/" & file.Name)%>');"href="#" style="font-size:10px">DELETE</a></div>
       <%end if 
      next
      %>
  </tr>
  <tr style="color:#666666; font-size:12px;">
    <td colspan="2" align="left">
    <div style="text-align:center;">
    <form action="file_upload.asp?FileName=<%=Server.URLEncode(uniqueName())%>&FilePath=<%=Server.URLEncode("images/" & path)%>&AcceptedFiles=<%=Server.URLEncode("JPG")%>&Redirect=<%=Server.URLEncode("album.asp")%>&MaxHeight=480&MaxWidth=640" enctype="multipart/form-data" method="post">
    <table align="center" border="0" cellspacing="0" cellpadding="20" class="main">
      <tr>
        <td align="center" class="details">
         <div style="color:#FF0000; font-size:10px;"><%if (request.QueryString("formatError") & "") <> "" then%>INVALID FILE FORMAT ( .JPG ONLY )<%end if%>&nbsp;</div><br>
          <input name="file" type="file" accept="jpg/jpeg" class="input">&nbsp;<input name="upload" value="Upload" type="submit" ></td>
       </tr>
    </table>      
  </form>
  </div>
    <br>
    </td>
  </tr>
  <tr style="font-size:12px;">
     <td class="list_title" align="center" style="padding:15px;">
        <form action="add_category.asp" method="post" id="addCategory">
        <span><b>NEW CATEGORY:</b></span>&nbsp;
        <input name="cat" type="text" style="width:140; font-size:12px;">
        <input name="" type="submit" value="ADD" style="font-size:10px;">
        </form>
     </td>
    <td class="list_title" align="center" style="padding:15px;">
      <form action="delete_category.asp" method="post" id="deleteCategory">
      <span><b>DELETE CATEGORY:&nbsp;</b></span>
      <select name="cat" style="font-size:12px; width:130px; height:19px;">
        <option selected>-- select --</option>
        <%
        set fo=fs.GetFolder(Server.MapPath("images/gallery"))
        for each x in fo.SubFolders
         Response.write("<option value='" & x.Name & "'>" & x.Name & "</option>")
        next
       %>
      </select>
      <input type="button" value="REMOVE" style="font-size:10px;" onClick="javascript:ConfirmFormChoice('Are you sure you wish to delete this category and all of its contents?','deleteCategory');">
      </form>
    </td>
  </tr>

</table>
<%else%>
<table width="700" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td align="center" style="padding-left:30px">   

    <div style="float:none;">    
      <%if cat <> "" and fs.FolderExists(Server.MapPath("images/gallery/" & cat)) then
        set fo=fs.GetFolder(Server.MapPath("images/gallery/" & cat))
        path = "images/gallery/" & cat
      else
        set fo=fs.GetFolder(Server.MapPath("images/gallery"))
        path = "images/gallery"
      end if

      for each folder in fo.subfolders ' display categorises
      isSub = false%>
        <a href="album.asp?cat=<%=encrypt(folder.Name)%>" style="text-decoration:none; cursor:pointer;">
          <div class="text" style="width:90px; height:120px;background-image:url(images/layout/folder.jpg); background-repeat:no-repeat; float:left; text-align:center;"><br /><br />
          <%set fi=fs.GetFolder(Server.MapPath("images/gallery/" & folder.Name))
            for each file in fi.files
              if right(lcase(file.Name),3) = "jpg" then%>
                <br><img src="thumbnail.aspx?picture=<%=server.URLEncode("images/gallery/" & folder.Name & "/" & file.Name)%>&maxWidth=40&maxHeight=30" style="border:1px solid #ffffff; cursor:default;" /><%
                exit for  
              end if
            next
          %><br><br><span style="font-size:9px; font-weight:normal; color:#000"><%=folder.Name%></span></div>
        </a>        
      <%next%>
      </div>
          </td>
    </tr> 
  <tr>
    <td align="center" style="padding-left:30px;">  
<br />
    <hr noshade="noshade" size="1px" color="#ffb883" width="400px" />
      <%for each file in fo.files ' display uncategorized pics
        if right(lcase(file.Name),3) = "jpg" then%>
          <a href="thumbnail.aspx?picture=<%=server.URLEncode(path & "/" & file.Name)%>&maxWidth=640&maxHeight=480" target="_blank"  style="text-decoration:none; cursor:pointer;">
          <img src="thumbnail.aspx?picture=<%=server.URLEncode(path & "/" & file.Name)%>&maxWidth=160&maxHeight=100" style="border:1px solid #ffffff; margin:5px; margin-top:14px;">
          </a>        
        <%end if 
      next%>
      <br /><br />
      <%if isSub then%>
      <hr noshade="noshade" size="1px" color="#ffb883" width="400px" />
      <div align="center" style="padding-left:20px;"><a href="album.asp" class="title"  style="text-decoration:none; cursor:pointer; font-weight:bold; font-size:10px">BACK TO MAIN ALBUM</a></div>
      <%end if%>
    </td>
  </tr>
</table>
<%end if%>
<!-- #INCLUDE file="layout_bottom.asp" -->
</body>
</html>

BELOW IS THE CODING FOR FILE_UPLOAD.ASP

<%
Option Explicit

' used to track various positions
dim PosB, PosBBound, PosEBound, PosEHead, PosBFld, PosEFld

' these handle the data
dim Boundary, BBoundary, PartBHeader, PartAHeader, PartContent, PartContent2, Binary

' for writing and converting
dim fso, fle, rst, DataString, FileName

' various other
dim I, Length, ContType, PartName, LastPart, BCrlf, PartContentLength
dim MaxWidth, MaxHeight, NewFileName, FilePath, AcceptedFiles, Redirect, Extension, SavedFileName, Image, NewHeight, otherExtension

Session.Timeout = 30
'Allow 300 seconds for file to upload
Server.ScriptTimeout = 300

MaxWidth      = CINT(Request.QueryString("MaxWidth"))
MaxHeight     = CINT(Request.QueryString("MaxHeight"))
NewFileName   = Request.QueryString("FileName")
FilePath      = Request.QueryString("FilePath")
AcceptedFiles = Request.QueryString("AcceptedFiles")
Redirect      = Request.QueryString("Redirect")

' ado constants
const adLongVarBinary = 205
const adLongVarchar = 201

' must be submitted using POST
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then

    ContType = Request.ServerVariables("HTTP_Content_Type") 
    ' must be "multipart/form-data"
    If LCase(Left(ContType, 19)) = "multipart/form-data" Then 
     PosB = InStr(LCase(ContType), "boundary=") 'get boundary
     If PosB > 0 Then Boundary = Mid(ContType, PosB + 9) 'we have one

     'bugfix IE5.01 - double header
     PosB = InStr(LCase(ContType), "boundary=") 
     If PosB > 0 then
      PosB = InStr(Boundary, ",")
      If PosB > 0 Then Boundary = Left(Boundary, PosB - 1)
     End If

     Length = CLng(Request.ServerVariables("HTTP_Content_Length")) 'Get Content-Length header
    End If

    If Length > 0 And Boundary <> "" Then
        Boundary = "--" & Boundary

        ' get request, binary 
        Binary = Request.BinaryRead(Length)

        ' convert boundry to binary
     For I=1 to len(Boundary)
         BBoundary = BBoundary & ChrB(Asc(Mid(Boundary,I,1)))
     Next

     ' binary crlf
     BCrlf = ChrB(Asc(vbCr)) & ChrB(Asc(vbLf))

     ' get begin and end of first boundary
     PosBBound = InStrB(Binary, BBoundary)
     PosEBound = InStrB(PosBBound + LenB(BBoundary), Binary, BBoundary, 0)

     ' keep doing until we had them all
     Do While (PosBBound > 0 And PosEBound > 0)

      ' get position of the end of the header
      PosEHead = InStrB(PosBBound + LenB(BBoundary), Binary, BCrlf & BCrlf)

      ' get content of header and convert to string
      PartBHeader = MidB(Binary, PosBBound + LenB(BBoundary) + 2, PosEHead - PosBBound - LenB(BBoundary) - 2) 
      PartAHeader = ""
      For I=1 to lenb(PartBHeader)
          PartAHeader = PartAHeader & Chr(AscB(MidB(PartBHeader,I,1)))
      Next

      ' make sure we end it with ;
      If Right(PartAHeader,1) <> ";" Then PartAHeader = PartAHeader & ";"

      ' get content of this part
      PartContent = MidB(Binary, PosEHead + 4, PosEBound - (PosEHead + 4) - 2)

      ' get name of part
      PosBFld = Instr(lcase(PartAHeader),"name=")
      If PosBFld > 0 Then
       ' name found
       PosEFld = Instr(PosBFld,lcase(PartAHeader),";")
       If PosEFld > 0 Then
        ' well-formed name header
        PartName = Mid(PartAHeader,PosBFld+5,PosEFld-PosBFld-5)
       End If
       ' chop of leading and trailing "'s 
       Do Until Left(PartName,1) <> """" 
        PartName = Mid(PartName,2)
       Loop
       Do Until Right(PartName,1) <> """" 
        PartName = Left(PartName,Len(PartName)-1)
       Loop
      End If

      ' get file name of part (if any)
      PosBFld = Instr(lcase(PartAHeader),"filename=""")
      If PosBFld > 0 Then
       ' content header found
       PosEFld = Instr(PosBFld + 10,lcase(PartAHeader),"""")
       If PosEFld > 0 Then
        ' well-formed content header
        FileName = Mid(PartAHeader,PosBFld+10,PosEFld-PosBFld-10)
       End If
       ' chop of leading and trailing "'s
       Do Until Left(FileName,1) <> """" 
        FileName = Mid(FileName,2)
       Loop
       Do Until Right(FileName,1) <> """" 
        FileName = Left(FileName,Len(FileName)-1)
       Loop
      Else
       FileName = ""
      End If

      ' ikkonverti minn binary ghal data regolari

      ' at the end, datastring will contain 'readable' data
      ' is this wide-byte binary data?
      if vartype(PartContent) = 8 then 
       ' need to do some conversion
       Set rst = CreateObject("ADODB.Recordset")
       PartContentLength = LenB(PartContent)
       if PartContentLength > 0 then
        ' data, so add to recordset to speed up conversion
        rst.Fields.Append "data", adLongVarBinary, PartContentLength
        rst.Open
        rst.AddNew
        rst("data").AppendChunk PartContent & ChrB(0)
        rst.Update
        PartContent2 = rst("data").GetChunk(PartContentLength)
        rst.close
        set rst = nothing
       else
        ' no data?
        PartContent2 = ChrB(0)
       End If
      Else 
       ' no need for conversion
       PartContent2 = PartContent
      End If

      PartContentLength = LenB(PartContent2)
      if PartContentLength > 0 then
       ' we have data to convert
       Set rst = CreateObject("ADODB.Recordset")
       rst.Fields.Append "data", adLongVarChar, PartContentLength
       rst.Open
       rst.AddNew
       rst("data").AppendChunk PartContent2 
       rst.Update
       DataString = rst("data")
       rst.close
       set rst = nothing
      Else
       ' nothing to convert
       dataString = ""
      End If

      ' conversion has been done, now what to do with it
      If FileName <> "" Then
       ' we have a file, let's save it to disk
       FileName    = Mid(Filename,InstrRev(FileName,"\")+1)
       Extension   = UCASE(Mid(Filename,InstrRev(FileName,".")+1))
     '  response.Write(Extension)
       IF AcceptedFiles <> "" THEN
        'Check if file is acceptable
        IF INSTR(1, UCASE(AcceptedFiles), Extension) = 0 THEN
              Response.redirect(redirect & "&formatError=true")
              Response.End
        End If
       End IF

       If NewFileName = "" THEN
        'l-isem tal-file jibqa l-istess / differend extension
        NewFileName = replace(lcase(FileName),"." & lcase(extension),".jpg")
       END IF
      ' response.Write(NewFileName)
'      response.end
       IF FilePath <> "" THEN
        IF RIGHT(FilePath,1) <> "\" THEN Filepath = FilePath & "\"
       END IF
       SavedFileName = FilePath & NewFileName
      ' response.Write(savedfilename)
       ' iftah il-file (textstream)
       set fso = Server.CreateObject("Scripting.Filesystemobject")
       set fle = fso.CreateTextFile(Server.MapPath(SavedFileName & "." & lcase(extension))) 

       ' write the data
       fle.write DataString
       fle.close
       ' cleanup
       set fle = nothing
       set fso = nothing     
      End If

      'remove other type of file if exists--------------------

'     if lcase(extension) = "jpg" then 
'      otherExtension = "pdf"
'     elseif lcase(extension) = "pdf" then
'      otherExtension = "jpg"
'     end if
'     
'     dim fs
'     dim f
'     set fs=Server.CreateObject("Scripting.FileSystemObject")
'     if fs.FileExists(Server.MapPath(SavedFileName & "." & otherExtension))=true then
'      set f=fs.GetFile(Server.MapPath(SavedFileName & "." & otherExtension))   
'      f.delete
'     end if
'     
'     set fs = nothing
'     set f = nothing

      '------------------------------


      LastPart = MidB(Binary, PosEBound + LenB(BBoundary), 2)

      If LastPart = ChrB(Asc("-")) & ChrB(Asc("-")) Then 
       ' don't look for others
       PosBBound = 0
       PosEBound = 0
      ELSE
       ' look for others
       PosBBound = PosEBound
       PosEBound = InStrB(PosBBound + LenB(BBoundary), Binary, BBoundary)
      End If

     loop
    ELSE
    ' Response.Write "<P>Invalid or empty request, no fields processed. Make sure that the content type is multipart/form-data"
     Response.End
    End If
ELSE
'   Response.Write "<P>Form must be submitted using the POST method"
    Response.End
End If

'Response.Write "<BR>Execution ended: " & Now  & "<BR>"
'Response.Write "Filename  = " & SavedFileName & "<BR>"
'Response.Write "MaxWidth  = " & MaxWidth      & "<BR>"
'Response.Write "MaxHeight = " & MaxHeight     & "<BR>"

'///Biddel id-daqs tal-istampa jekk tkun akbar minn kemm suppost///
'IF MaxHeight > 0 AND MaxWidth > 0 THEN
'   Set Image = Server.CreateObject("csImageFile.Manage")
'   Image.ReadFile Server.MapPath(SavedFileName)
'   IF Image.Height > MaxHeight OR Image.Width > MaxWidth THEN
'    NewHeight = ((Image.Height/Image.Width) * MaxWidth)
'    IF NewHeight > MaxHeight THEN
'     'Resizing Based On Height
'     Image.Resize 0, MaxHeight
'    ELSE
'     'Resizing Based On Width
'     Image.Resize MaxWidth, 0
'    End If
'    Image.JpegQuality = 85
'    Image.WriteFile Server.MapPath(SavedFileName)
'   End If
'   Image.HasFileInfo = False
'   Set Image = Nothing
'END IF
'\\\\\\\\\\\\\\\\\\\\\\

IF Redirect <> "" AND lcase(extension) = "jpg" AND MaxWidth > 0  AND MaxHeight > 0 THEN 
Response.redirect "resize_picture.aspx?Picture=" & server.URLEncode(Server.MapPath(SavedFileName)) & "." & lcase(extension) & "&MaxWidth=" & server.URLEncode(maxWidth) & "&maxHeight=" & server.URLEncode(maxHeight) & "&Redirectto=" & server.URLEncode(Redirect)
ELSEIF Redirect <> "" THEN 
Response.redirect(redirect) 
END IF
%>

CAN ANYONE HELP ME INTEGRATE MULTIPLE UPLOADS IN THE ABOVE MENTIONED FRAMEWORK :) ?

A: 

Did you try using multiple <input type="file"> 's?

EDIT:

What you might try also then, is dynamically creating an IFRAME with the file input field in it and submit that form, holding the file in a temporary location on the server and somehow indicating to the user that they have uploaded one of the files.

Myles
yes i tried, but only 1 of them uploaded.
Josmar
A: 

Perhaps a Flash-based upload tool would work better. Many sites that support multiple uploads on a single page are moving to this kind of solution.

Here are a couple that a Google search unearthed:

JoshMock
Thanks for your replies...but I wish to have a multiple file upload system (which is pretty easy to do in asp.net 2.0)but I need some help to either implement the above system to have multiple upload...or find another solution where I can select the directory to upload and which resizes/compresses pictures i upload.thanks
Josmar
A: 

FYI, these pages are classic ASP and unrelated to the more recently introduced ASP.NET technology.

I don't know how to fix your problem, but a long, long time ago, I've used the commercially available SoftArtisans FileUp component to allow reliable multi-file uploads in classic ASP.

Bernard Vander Beken
i know the coding is a bit old, but it was written for free by a friend of mine during his free time...but the website is on a windows hosted plan and asp.net 2.0/3.5..hope anyone can help me!
Josmar