Can anyone convert this?

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance

From: Anubis (anubis_at_bluestreem.com.au)
Date: 06/02/04


Date: Wed, 2 Jun 2004 05:25:19 -0700

Hello,

I was recently reading the MSDN Journal on file uploading and I was
wondering if anyone knew how to conver this to JS. I have tried but keep
coming up to dead ends... I'm not even sure if it is even possible?

Thanks
-Steve

==== SCRIPT TO CONVERT ===

<%
'Adjust this depending on the size of the files you'll
'be expecting; longer timeout for larger files!
Server.ScriptTimeout = 5400

Const ForWriting = 2
Const TristateTrue = -1
CrLf = Chr(13) & Chr(10)

'This function retreives a field's name
Function GetFieldName(infoStr)
 sPos = InStr(infoStr, "name=")
 EndPos = InStr(sPos + 6, infoStr, Chr(34) & ";")
 If EndPos = 0 Then
  EndPos = inStr(sPos + 6, infoStr, Chr(34))
 End If
 GetFieldName = Mid(infoStr, sPos + 6, endPos - _
  (sPos + 6))
End Function

'This function retreives a file field's filename
Function GetFileName(infoStr)
 sPos = InStr(infoStr, "filename=")
 EndPos = InStr(infoStr, Chr(34) & CrLf)
 GetFileName = Mid(infoStr, sPos + 10, EndPos - _
  (sPos + 10))
End Function

'This function retreives a file field's MIME type
Function GetFileType(infoStr)
 sPos = InStr(infoStr, "Content-Type: ")
 GetFileType = Mid(infoStr, sPos + 14)
End Function

'Yank the file (and anything else) that was posted
PostData = ""
Dim biData
biData = Request.BinaryRead(Request.TotalBytes)
'Careful! It's binary! So, let's change it into
'something a bit more manageable.
For nIndex = 1 to LenB(biData)
 PostData = PostData & Chr(AscB(MidB(biData,nIndex,1)))
Next

'Having used BinaryRead, the Request.Form collection is
'no longer available to us. So, we have to parse the
'request variables ourselves!
'First, let's find that encoding type!
ContentType = Request.ServerVariables( _
 "HTTP_CONTENT_TYPE")
ctArray = Split(ContentType, ";")
'File posts only work well when the encoding is
'"multipart/form-data", so let's check for that!
If Trim(ctArray(0)) = "multipart/form-data" Then
 ErrMsg = ""
 ' grab the form boundary...
 bArray = Split(Trim(ctArray(1)), "=")
 Boundary = Trim(bArray(1))
 'Now use that to split up all the variables!
 FormData = Split(PostData, Boundary)
 'Extract the information for each variable and its data
 Dim myRequest, myRequestFiles(9, 3)
 Set myRequest = CreateObject("Scripting.Dictionary")
 FileCount = 0
 For x = 0 to UBound(FormData)
  'Two CrLfs mark the end of the information about
  'this field; everything after that is the value
  InfoEnd = InStr(FormData(x), CrLf & CrLf)
  If InfoEnd > 0 Then
   'Get info for this field, minus stuff at the end
   varInfo = Mid(FormData(x), 3, InfoEnd - 3)
   'Get value for this field, being sure to skip
   'CrLf pairs at the start and the CrLf at the end
   varValue = Mid(FormData(x), InfoEnd + 4, _
    Len(FormData(x)) - InfoEnd - 7)
   'Is this a file?
   If (InStr(varInfo, "filename=") > 0) Then
    'Place it into our files array
    '(While this supports more than one file
    'uploaded at a time we only consider the
    'single file case in this example)
    myRequestFiles(FileCount, 0) = GetFieldName( _
     varInfo)
    myRequestFiles(FileCount, 1) = varValue
    myRequestFiles(FileCount, 2) = GetFileName( _
     varInfo)
    myRequestFiles(FileCount, 3) = GetFileType( _
     varInfo)
    FileCount = FileCount + 1
   Else
    'It's a regular field
    myRequest.add GetFieldName(varInfo), varValue
   End If
  End If
 Next
Else
 ErrMsg = "Wrong encoding type!"
End If

'Save the actual posted file
'If supporting more than one file, turn this into a loop!

Set lf = server.createObject("Scripting.FileSystemObject")
If myRequest("filename") = "original" Then
 'Use the filename that came with the file
 'At this point, you need to determine what sort of
 'client sent the file. Macintoshes only send the file
 'name, with no path information, while Windows clients
 'send the entire path of the file that was selected
 BrowserType = UCase(Request.ServerVariables( _
  "HTTP_USER_AGENT"))
 If (InStr(BrowserType, "WIN") > 0) Then
  'It's Windows; yank the filename off the end!
  sPos = InStrRev(myRequestFiles(0, 2), "\")
  fName = Mid(myRequestFiles(0, 2), sPos + 1)
 End If
 If (InStr(BrowserType, "MAC") > 0) Then
  'It's a Mac. Simple.
  '(Mac filenames can contain characters that are
  'illegal under Windows, so look out for that!)
  fName = myRequestFiles(0, 2)
 End If
 'If your upload path is different, set that here
 FilePath = "./" & fName
Else
 'Use the user-specified filename instead
 'If your upload path is different, set that here
 FilePath = "./" & myRequest("userSpecifiedName")
End If
SavePath = Server.MapPath(FilePath)
Set SaveFile = lf.CreateTextFile(SavePath, True)
SaveFile.Write(myRequestFiles(0, 1))
SaveFile.Close

'IIS may hang if you don't explicitly return SOMETHING.
'So, redirect to another page or provide some kind of
'feedback below...
%>
<html>
<body>
<% If ErrMsg = "" Then %>
 Thanks for the file! It was yummy!
<% Else %>
 <%= ErrMsg %>
<% End If %>
</body>
</html>



Relevant Pages

  • Re: Sharepoint Error 5009 "String longer than 255 characters"
    ... I'm surprised though that you could upload it. ... The document has no problems being uploaded to the SharePoint document ... I uploaded a different document with a longer file name than the above ... This appears to eliminate the length of the filename ...
    (microsoft.public.sharepoint.windowsservices)
  • Upload a file to a web using VBA
    ... This is a FORM that needs the fileName to be populated, but I have not been able to get it to accept fileName from any means I have tried. ... I have been able to access the site, stuff all kinds of other info into the websites varables, but I have NOT been able to stuff the fileName to upload. ... Dim ScoutWeb As String ... spage = oScout.document.DocumentElement.outerHTML ' the the outer html for testing purposes ...
    (microsoft.public.excel.programming)
  • RE: Uploading files to Web server
    ... CodeBehind on upload button click event ... filUpload.PostedFile.SaveAs(locationOnWebServer + fileName); ... file.InputStream.Read(buffer, 0, fileLength); ... Dim file As HttpPostedFile = filUpload.PostedFile ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: Sharepoint Error 5009 "String longer than 255 characters"
    ... I'm surprised though that you could upload it. ... The document has no problems being uploaded to the SharePoint document ... I uploaded a different document with a longer file name than the above ... This appears to eliminate the length of the filename ...
    (microsoft.public.sharepoint.windowsservices)