Home All Groups Group Topic Archive Search About

How can I copy files to a web folder using ASP+VBSCRIPT



Author
23 Mar 2006 8:49 PM
Julien
Hello,

I have some files located in a file server and managed by a SQL database
from a web based interface using ASP + VBSCRIPT technology.
I need to automatically copy those files to a web folder.

I that possible?

Thanks.

Author
24 Mar 2006 12:44 PM
Slim
"Julien" <Jul***@discussions.microsoft.com> wrote in message
news:0AFA2004-C2EA-4783-8DC6-EA1A192AEB53@microsoft.com...
> Hello,
>
> I have some files located in a file server and managed by a SQL database
> from a web based interface using ASP + VBSCRIPT technology.
> I need to automatically copy those files to a web folder.
>
> I that possible?
>

that depends but where is the file server?

on the same network?


if not you may need user actions on the client




Show quote
> Thanks.
>
Author
24 Mar 2006 1:00 PM
Julien
Hi,
Thanks for answering :)
On one side I have a web server that stores files and hosts the SQL database.
On the other a web server (Sharepoint site) to which I want to send files
(.doc, .xls, ...).
Those two servers are on the same enterprise network. But the Sharepoint
site can only be accessed via https.
How can I do ?
This action can be done manually using "drag and drop" into a mapped web
folder (network location in Windows Explorer). So I imagined it could be done
automatically using a script.
Thks
Author
24 Mar 2006 1:31 PM
Slim
why not just use
Set fso = CreateObject("Scripting.FileSystemObject")

and use the \\networkaddress ?


the above would be much easer and is easy to find help on hw to use it



if you want some code that will upload

use this form in page1.asp
***
<form enctype="multipart/form-data" action="page2.asp" method="post"
name="main" LANGUAGE=javascript onsubmit="return main_onsubmit()">
<input name="attach1" type="file" size="50">
<input name="submit" type="submit" value="Upload">
</form>

***
this code in page2.asp
***

dim path:path = "C:\fatfluid\uploadedimages"
dim path2:path2 = "C:\fatfluid\recordingImages"

Set up = new aspUpload
up.Save(path)
Set upFile = new UploadedFile



Class aspUpload
Public UploadedFiles
Public FormElements

Private VarArrayBinRequest
Private StreamRequest
Private uploadedYet

Private Sub Class_Initialize()
  Set UploadedFiles = Server.CreateObject("Scripting.Dictionary")
  Set FormElements = Server.CreateObject("Scripting.Dictionary")
  Set StreamRequest = Server.CreateObject("ADODB.Stream")
  StreamRequest.Type = 1 'adTypeBinary
  StreamRequest.Open
  uploadedYet = false
End Sub

Private Sub Class_Terminate()
  If IsObject(UploadedFiles) Then
   UploadedFiles.RemoveAll()
   Set UploadedFiles = Nothing
  End If
  If IsObject(FormElements) Then
   FormElements.RemoveAll()
   Set FormElements = Nothing
  End If
  StreamRequest.Close
  Set StreamRequest = Nothing
End Sub

Public Property Get Form(sIndex)
  Form = ""
  If FormElements.Exists(LCase(sIndex)) Then Form =
FormElements.Item(LCase(sIndex))
End Property

Public Property Get Files()
  Files = UploadedFiles.Items
End Property

'Calls Upload to extract the data from the binary request and then saves
the uploaded files
Public Sub Save(path)
  Dim streamFile, fileItem

  if Right(path, 1) <> "\" then path = path & "\"

  if not uploadedYet then Upload

  For Each fileItem In UploadedFiles.Items
   Set streamFile = Server.CreateObject("ADODB.Stream")
   streamFile.Type = 1
   streamFile.Open
   StreamRequest.Position=fileItem.Start
   StreamRequest.CopyTo streamFile, fileItem.Length
   streamFile.SaveToFile path & fileItem.FileName, 2
   streamFile.close
   Set streamFile = Nothing
   fileItem.Path = path & fileItem.FileName
   Next
End Sub

Public Function SaveBinRequest(path) ' For debugging purposes
  StreamRequest.SaveToFile path & "\debugStream.bin", 2
End Function

Public Sub DumpData() 'only works if files are plain text
  Dim i, aKeys, f
  'response.write "Form Items:<br>"
  aKeys = FormElements.Keys
  For i = 0 To FormElements.Count -1 ' Iterate the array
   'response.write aKeys(i) & " = " & FormElements.Item(aKeys(i)) & "<BR>"
  Next
  'response.write "Uploaded Files:<br>"
  For Each f In UploadedFiles.Items
   'response.write "Name: " & f.FileName & "<br>"
   'response.write "Type: " & f.ContentType & "<br>"
   'response.write "Start: " & f.Start & "<br>"
   'response.write "Size: " & f.Length & "<br>"
   Next
    End Sub

Private Sub Upload()
  Dim nCurPos, nDataBoundPos, nLastSepPos
  Dim nPosFile, nPosBound
  Dim sFieldName, osPathSep, auxStr

  'RFC1867 Tokens
  Dim vDataSep
  Dim tNewLine, tDoubleQuotes, tTerm, tFilename, tName, tContentDisp,
tContentType
  tNewLine = Byte2String(Chr(13))
  tDoubleQuotes = Byte2String(Chr(34))
  tTerm = Byte2String("--")
  tFilename = Byte2String("filename=""")
  tName = Byte2String("name=""")
  tContentDisp = Byte2String("Content-Disposition")
  tContentType = Byte2String("Content-Type:")

  uploadedYet = true

  on error resume next
  VarArrayBinRequest = Request.BinaryRead(Request.TotalBytes)
  if Err.Number <> 0 then
   response.write "<br><br><B>System reported this error:</B><p>"
   response.write Err.Description & "<p>"
   response.write "The most likely cause for this error is the incorrect
setup of AspMaxRequestEntityAllowed in IIS MetaBase. Please see instructions
in the <A
HREF='http://www.freeaspupload.net/freeaspupload/requirements.asp'>requirements
page of freeaspupload.net</A>.<p>"
   Exit Sub
  end if
  on error goto 0 'reset error handling

  nCurPos = FindToken(tNewLine,1) 'Note: nCurPos is 1-based (and so is
InstrB, MidB, etc)

  If nCurPos <= 1  Then Exit Sub

  'vDataSep is a separator like -----------------------------21763138716045
  vDataSep = MidB(VarArrayBinRequest, 1, nCurPos-1)

  'Start of current separator
  nDataBoundPos = 1

  'Beginning of last line
  nLastSepPos = FindToken(vDataSep & tTerm, 1)

  Do Until nDataBoundPos = nLastSepPos

   nCurPos = SkipToken(tContentDisp, nDataBoundPos)
   nCurPos = SkipToken(tName, nCurPos)
   sFieldName = ExtractField(tDoubleQuotes, nCurPos)

   nPosFile = FindToken(tFilename, nCurPos)
   nPosBound = FindToken(vDataSep, nCurPos)

   If nPosFile <> 0 And  nPosFile < nPosBound Then
    Dim oUploadFile
    Set oUploadFile = New UploadedFile

    nCurPos = SkipToken(tFilename, nCurPos)
    auxStr = ExtractField(tDoubleQuotes, nCurPos)
                ' We are interested only in the name of the file, not the
whole path
                ' Path separator is \ in windows, / in UNIX
                ' While IE seems to put the whole pathname in the stream,
Mozilla seem to
                ' only put the actual file name, so UNIX paths may be rare.
But not impossible.
                osPathSep = "\"
                if InStr(auxStr, osPathSep) = 0 then osPathSep = "/"
    oUploadFile.FileName = Right(auxStr, Len(auxStr)-InStrRev(auxStr,
osPathSep))

    if (Len(oUploadFile.FileName) > 0) then 'File field not left empty
     nCurPos = SkipToken(tContentType, nCurPos)

                    auxStr = ExtractField(tNewLine, nCurPos)
                    ' NN on UNIX puts things like this in the streaa:
                    '    ?? python py type=?? python application/x-python
     oUploadFile.ContentType = Right(auxStr, Len(auxStr)-InStrRev(auxStr, "
"))
     nCurPos = FindToken(tNewLine, nCurPos) + 4 'skip empty line

     oUploadFile.Start = nCurPos-1
     oUploadFile.Length = FindToken(vDataSep, nCurPos) - 2 - nCurPos

     If oUploadFile.Length > 0 Then UploadedFiles.Add LCase(sFieldName),
oUploadFile
    End If
   Else
    Dim nEndOfData
    nCurPos = FindToken(tNewLine, nCurPos) + 4 'skip empty line
    nEndOfData = FindToken(vDataSep, nCurPos) - 2
    If Not FormElements.Exists(LCase(sFieldName)) Then FormElements.Add
LCase(sFieldName), String2Byte(MidB(VarArrayBinRequest, nCurPos,
nEndOfData-nCurPos))
   End If

   'Advance to next separator
   nDataBoundPos = FindToken(vDataSep, nCurPos)
  Loop
  StreamRequest.Write(VarArrayBinRequest)
End Sub

Private Function SkipToken(sToken, nStart)
  SkipToken = InstrB(nStart, VarArrayBinRequest, sToken)
  If SkipToken = 0 then
   'response.write "Error in parsing uploaded binary request."
   Response.End
  end if
  SkipToken = SkipToken + LenB(sToken)
End Function

Private Function FindToken(sToken, nStart)
  FindToken = InstrB(nStart, VarArrayBinRequest, sToken)
End Function

Private Function ExtractField(sToken, nStart)
  Dim nEnd
  nEnd = InstrB(nStart, VarArrayBinRequest, sToken)
  If nEnd = 0 then
   'response.write "Error in parsing uploaded binary request."
   Response.End
  end if
  ExtractField = String2Byte(MidB(VarArrayBinRequest, nStart, nEnd-nStart))
End Function

'String to byte string conversion
Private Function Byte2String(sString)
  Dim i
  For i = 1 to Len(sString)
     Byte2String = Byte2String & ChrB(AscB(Mid(sString,i,1)))
  Next
End Function

'Byte string to string conversion
Private Function String2Byte(bsString)
  Dim i
  String2Byte =""
  For i = 1 to LenB(bsString)
     String2Byte = String2Byte & Chr(AscB(MidB(bsString,i,1)))
  Next
End Function
End Class

Class UploadedFile
Public ContentType
Public Start
Public Length
Public Path
Private nameOfFile

    ' Need to remove characters that are valid in UNIX, but not in Windows
    Public Property Let FileName(fN)
        nameOfFile = fN
        nameOfFile = SubstNoReg(nameOfFile, "\", "_")
        nameOfFile = SubstNoReg(nameOfFile, "/", "_")
        nameOfFile = SubstNoReg(nameOfFile, ":", "_")
        nameOfFile = SubstNoReg(nameOfFile, "*", "_")
        nameOfFile = SubstNoReg(nameOfFile, "?", "_")
        nameOfFile = SubstNoReg(nameOfFile, """", "_")
        nameOfFile = SubstNoReg(nameOfFile, "<", "_")
        nameOfFile = SubstNoReg(nameOfFile, ">", "_")
        nameOfFile = SubstNoReg(nameOfFile, "|", "_")
    End Property

    Public Property Get FileName()
        FileName = nameOfFile
    End Property

    'Public Property Get FileN()ame
End Class


' Does not depend on RegEx, which is not available on older VBScript
' Is not recursive, which means it will not run out of stack space
Function SubstNoReg(initialStr, oldStr, newStr)
    Dim currentPos, oldStrPos, skip
    If IsNull(initialStr) Or Len(initialStr) = 0 Then
        SubstNoReg = ""
    ElseIf IsNull(oldStr) Or Len(oldStr) = 0 Then
        SubstNoReg = initialStr
    Else
        If IsNull(newStr) Then newStr = ""
        currentPos = 1
        oldStrPos = 0
        SubstNoReg = ""
        skip = Len(oldStr)
        Do While currentPos <= Len(initialStr)
            oldStrPos = InStr(currentPos, initialStr, oldStr)
            If oldStrPos = 0 Then
                SubstNoReg = SubstNoReg & Mid(initialStr, currentPos,
Len(initialStr) - currentPos + 1)
                currentPos = Len(initialStr) + 1
            Else
                SubstNoReg = SubstNoReg & Mid(initialStr, currentPos,
oldStrPos - currentPos) & newStr
                currentPos = oldStrPos + skip
            End If
        Loop
    End If
End Function








Show quote
"Julien" <Jul***@discussions.microsoft.com> wrote in message
news:E1D059CF-4A14-4F70-89EB-8A66E01C9EDD@microsoft.com...
> Hi,
> Thanks for answering :)
> On one side I have a web server that stores files and hosts the SQL
> database.
> On the other a web server (Sharepoint site) to which I want to send files
> (.doc, .xls, ...).
> Those two servers are on the same enterprise network. But the Sharepoint
> site can only be accessed via https.
> How can I do ?
> This action can be done manually using "drag and drop" into a mapped web
> folder (network location in Windows Explorer). So I imagined it could be
> done
> automatically using a script.
> Thks
Author
24 Mar 2006 1:49 PM
Julien
I do not have the network path. There is probably not shares on it nether.
The only way for me to access this resource seems to be the URL.

I'm using ASPSmartUpload to upload my documentation on the file server.
Author
24 Mar 2006 2:46 PM
Slim
"Julien" <Jul***@discussions.microsoft.com> wrote in message
news:763D5890-03A4-4A5B-AB04-0C472225BC74@microsoft.com...
>I do not have the network path. There is probably not shares on it nether.
> The only way for me to access this resource seems to be the URL.
>
> I'm using ASPSmartUpload to upload my documentation on the file server.
>

the code I posted handles large, I find most components don't.

I can see your problem clearer now,

I have a suggestion, not sure how practical it is

you could get a script to select the files one by one using
Scripting.FileSystemObject

you could then use

Set objExplorer = WScript.CreateObject ("InternetExplorer.Application")

and sent them by form to a upload page one by one. you could fire the page
via scheduled tasks

you can run this page invisibly
Author
24 Mar 2006 2:58 PM
Julien
> you could then use
>
> Set objExplorer = WScript.CreateObject ("InternetExplorer.Application")
>
> and sent them by form to a upload page one by one. you could fire the page
> via scheduled tasks

This is a good start. I'll try this.

Thanks

AddThis Social Bookmark Button