Avatar billede fxfever Nybegynder
08. maj 2003 - 23:56 Der er 6 kommentarer

Langsomt script m.m.

Hej!
Jeg sidder og laver en side der skal kunne uploade og lave en html-side. Det virker også fint, men scriptet til at uploade med er enormt langsomt og filer over 250 kb tager evigheder eller lykkedes slet til. Scriptet er hygget direkte fra Microsoft. Kan det gøres hurtigere...evt. ved at skære noget væk???
Et andet spørgsmål er, hvilke rettigheder den mappe scriptet ligger i på serveren skal have for at måtte oprette en ny fil??

Herunder er scriptet:
-----------------------------------------------
<%
'Adjust this depending on the size of the files you'll
'be expecting; longer timeout for larger files!
Server.ScriptTimeout = 6500

'Dim overskrift, frist, evt
'overskrift = Request.Form("overskrift")
'frist = Request.Form("frist")
'evt = Request.Form("evt")

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...
--------------------------------------------------
---------------------------------------------------
Her slutter scriptet.
Avatar billede erikjacobsen Ekspert
09. maj 2003 - 00:02 #1
Din server understøtter ikke en upload komponent? Det går
helt naturligt langsomt når det skal en tur gennem ASPs Basic
Avatar billede fxfever Nybegynder
09. maj 2003 - 00:09 #2
Næh, problemet er at jeg ikke har fuld kontrol over serveren og må derfor tage til takke med dette... Håber bare at det kunne optimeres lidt!
Avatar billede fxfever Nybegynder
09. maj 2003 - 10:48 #3
Er der måske så en hurtigere måde at uploade på som ikke er komponent-baseret?
Og hvad med mit andet spørgsmål med rettigheder....?
Avatar billede erikjacobsen Ekspert
09. maj 2003 - 10:55 #4
Der skal vel være skriveadgang til mappen for webserveren (den
bruger, der kører som webserver)

Uden komponent? Jamen, hvis hastigheden er så vigtig, så skaf
dig en komponent, eller skift til en server med komponent. Eller
installer PHP.
Avatar billede fxfever Nybegynder
10. maj 2003 - 21:09 #5
ok - forstået! Nogle anbefalinger af komponent...!
Avatar billede fxfever Nybegynder
10. maj 2003 - 21:12 #6
??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester