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

Discussion in 'ASP General' started by Julien, Mar 23, 2006.

  1. Julien

    Julien Guest

    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.
     
    Julien, Mar 23, 2006
    #1
    1. Advertising

  2. Julien

    Slim Guest

    "Julien" <> wrote in message
    news:...
    > 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




    > Thanks.
    >
     
    Slim, Mar 24, 2006
    #2
    1. Advertising

  3. Julien

    Julien Guest

    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
     
    Julien, Mar 24, 2006
    #3
  4. Julien

    Slim Guest

    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








    "Julien" <> wrote in message
    news:...
    > 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
     
    Slim, Mar 24, 2006
    #4
  5. Julien

    Julien Guest

    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.
     
    Julien, Mar 24, 2006
    #5
  6. Julien

    Slim Guest

    "Julien" <> wrote in message
    news:...
    >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
     
    Slim, Mar 24, 2006
    #6
  7. Julien

    Julien Guest

    > 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
     
    Julien, Mar 24, 2006
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Steve Richter
    Replies:
    4
    Views:
    5,572
    Steve Richter
    Apr 18, 2005
  2. Alex
    Replies:
    2
    Views:
    1,294
  3. Replies:
    26
    Views:
    2,184
    Roland Pibinger
    Sep 1, 2006
  4. Replies:
    7
    Views:
    417
    Gabriel Genellina
    Sep 25, 2007
  5. Replies:
    1
    Views:
    276
    =?Utf-8?B?TWFuaXNo?=
    Oct 16, 2007
Loading...

Share This Page