Avatar billede ferstin Nybegynder
31. marts 2003 - 12:39 Der er 24 kommentarer og
2 løsninger

Timeout på upload

Hvad kan jeg gøre for at undgår denne timeout meddelelse fra serveren, når jeg anvender mit upload-script?

Technical Information (for support personnel)

Error Type:
Active Server Pages, ASP 0113 (0x80004005)
The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools.
/emneside/uploadgfx2.asp


Browser Type:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)

Page:
POST 537714 bytes to /emneside/uploadgfx2.asp

POST Data:
error '80020009'
Exception occurred.

/iisHelp/common/500-100.asp, line 223
Avatar billede medions Nybegynder
31. marts 2003 - 12:44 #1
Sæt flg. linje i toppen af dit dokument!

Session.TimeOut = 60

//>Rune
Avatar billede ferstin Nybegynder
31. marts 2003 - 12:51 #2
Det hjalp ikke...
Avatar billede medions Nybegynder
31. marts 2003 - 12:56 #3
Well så sæt den til noget højere :-)

Session.TimeOut = 120

-Evt. prøv at sæt Response.Buffer = True !

//>Rune
Avatar billede ferstin Nybegynder
31. marts 2003 - 13:01 #4
hmm... øv. Det virker heller ikke.
Avatar billede verakso Nybegynder
31. marts 2003 - 13:19 #5
Prøv med mindre filer ;)
Avatar billede ferstin Nybegynder
31. marts 2003 - 13:20 #6
Det virker fint med små filer. Det går galt når jeg prøver med filer fra ca 500 Kb og opefter.
Avatar billede mm12010 Nybegynder
31. marts 2003 - 15:07 #7
Følgende sætter egenskaben for hvor længe scripts må køre, inden de termineres af serveren - Standardværdien i IIS er 90 sek.

Server.ScriptTimeout = 240
Avatar billede mm12010 Nybegynder
31. marts 2003 - 15:09 #8
4 minutter = Server.ScriptTimeout = 240

Det skal dog bruges med varsomhed, da det vil medføre at serveren vil blive ved med at køre feljbehæftede scripts lige så længe, hvilket vil bruge en masse ressourcer.
Avatar billede ferstin Nybegynder
31. marts 2003 - 15:11 #9
Kan jeg så evt. skrive Server.ScriptTimeout = 240 i toppen af mit dokument?
Avatar billede mm12010 Nybegynder
31. marts 2003 - 15:17 #10
jep - eller muligvis i global.asa
Avatar billede ferstin Nybegynder
31. marts 2003 - 15:19 #11
okay, jeg checker lige op på det i morgen.
Avatar billede ferstin Nybegynder
01. april 2003 - 12:42 #12
tak, jeg lukker. Håber jeg kan få det til at virke senere. Jeg lader det lige ligge en tid.
Avatar billede medions Nybegynder
01. april 2003 - 17:34 #13
Fair nok...
Thx 4 Poinz

//>Rune
Avatar billede mm12010 Nybegynder
01. april 2003 - 17:47 #14
takker for point :o)
Avatar billede ferstin Nybegynder
02. april 2003 - 12:12 #15
Jeg har netop sat Server.ScriptTimeout = 2400 (40 min) så nu fungerer det bedre, - den gå i hvert fald ikke død. Min upload hastighed er bare temmelig langsom - æv.
Avatar billede mm12010 Nybegynder
02. april 2003 - 12:21 #16
hvordan uploader du?
Avatar billede ferstin Nybegynder
02. april 2003 - 12:32 #17
via sådan et smart script lavet af Lars Snyder, men jeg har selv pyntet lidt på det...
Avatar billede mm12010 Nybegynder
02. april 2003 - 12:37 #18
hmm... ok

må jeg se? :o)
Avatar billede ferstin Nybegynder
02. april 2003 - 12:39 #19
Skal jeg lægge det hele ud her på exp? Det fylder temmelig meget...
Avatar billede ferstin Nybegynder
02. april 2003 - 12:41 #20
Kan det passe jeg kun uploadet 0,15 Mb i løbet af 15 minutter?¿?
Avatar billede mm12010 Nybegynder
02. april 2003 - 12:46 #21
det må du gerne, ellers kan du sende til mig på jesper@grini.dk

det afhænger jo både af script, server og netforbindelse - det lyder godt nok vildt, men ja måske - umiddelbart er det svært at sige noget om...
Avatar billede ferstin Nybegynder
02. april 2003 - 12:51 #22
okay, jeg poster det bare her...

uploadfx.asp:
<%@ Language="VBScript" %>
<%  Option Explicit %>
<%
If session("log") <> "admin" then
Response.Redirect "login.asp"
Else
Server.ScriptTimeout = 2400
Response.Buffer = True
%>



<!-- #INCLUDE FILE="fileupload.asp" -->
<!-- #Include file="adovbs.inc" -->
<HTML>
<HEAD>
<link rel='stylesheet' type='text/css' href='../sheet.css'>
<title>admin</title>
</HEAD>
<body class="main">
<h3>Upload fil</h3>

<%
'Skal formen vises?
If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then

%>

<FORM ENCTYPE="multipart/form-data" ACTION="uploadgfx.asp" METHOD="POST">
<P>Vælg et billede:<br>

<INPUT NAME="fileupload" TYPE="file"><BR>
<INPUT NAME="ID" TYPE="hidden" value="3">
<INPUT NAME="Action" TYPE="submit" VALUE="Upload">
</FORM>
Husk at filen h&oslash;jst m&aring; fylde 10.000.000 byte. Ved st&oslash;rre filer, s&aring; hav t&aring;lmodighed. Afbryd ALDRIG overf&oslash;rslen undervejs!<br><br>




<%
    Else
        Dim intFileUpload, strContentType, strFilename, intFileTotalBytes

        intFileUpload = FileUpload("download/", 10000000, Array(""), Array(""), strContentType, strFilename, intFileTotalBytes)

        If intFileUpload = 0 Then

Dim oConn, SQL, rs, DSN
Set oConn = Server.CreateObject("ADODB.Connection")
DSN = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("../../db.mdb")

oConn.Open DSN
Set rs = Server.CreateObject("ADODB.Recordset")

SQL="UPDATE Filer SET "
SQL = SQL & "Filtype ='" & strFilename & "'"
SQL = SQL & ", Storrelse ='" & intFileTotalBytes & "'"
SQL = SQL & " WHERE Id=" & session("ID")


rs.open SQL, oConn, 3, 3

            Response.Write "Filen " & strFilename & " er nu uploadet til mappen 'Download'.<BR>"
            'Response.Write "Det er en fil af typen " & strContentType & " og den fylder " & intFileTotalBytes & " bytes:<BR>"
            Response.Write "Filen fylder " & intFileTotalBytes & " bytes.<BR><BR>"
            Response.Write "<a href=""vis_produkter2.asp"">Tilbage til filoversigten</a>"
        Else
            Response.Write "Der opstod en fejl under upload!<BR>"
            Response.Write "Fejl nr: " & intFileUpload & "<BR>"
            Response.Write "Filnavn: " & strFilename & "<BR>"
            Response.Write "Filtype: " & strContentType & "<BR>"
            Response.Write "Filstørrelse: " & intFileTotalBytes & "<BR>"
        End If
    End If
%>
<br>



</body>
</html>

<% End if %>
Avatar billede ferstin Nybegynder
02. april 2003 - 12:52 #23
include-filen fileupload.asp:

<%
'-------------------- Start: fileupload.asp --------------------

'*** FileUpload                          ***
'*** af Lars Snyder (pila@mailme.dk)      ***
'*** http://www.tipsogtricks-online.dk    ***
'*
'* Sprog: VBScript
'*
'* Input:
'* strPath        Streng med uploadpath, f.eks. "output/", "/asp/binary/upload/" eller ""
'* intMaxSize    Tilladte grænse for filerne filer der uploades. Hvis < 1 er der ingen grænse.
'* arrAcceptType  Array med accepterede Content-Type, f.eks. "image/gif", "image/jpeg". Hvis ("") er alle filtyper accepterede.
'* arrAcceptExt  Array med sidste dele af filnavne, f.eks. "gif", "jpg" eller "kundennefil.xls". Hvis ("") er alle ext accepterede.
'*
'* Output: 0 hvis filen er uploaded korrekt.
'*        1 Request fra bruger gik galt
'*        2 Content med name="fileupload" blev ikke fundet
'*        3 Ingen filnavn
'*        4 Content-Type accepteres ikke
'*        5 Ext accepteres ikke
'*        6 Filen er for stor
'*        7 Filen blev ikke uploaded korrekt
'* strContentType    Den fundne type, f.eks. "image/gif"
'* strFilename        Det fundne filnavn, f.eks. "button.gif"
'* intFileTotalBytes  Filens samlede størrelse, f.eks. 9853
'*
'* Eksempler på ContentTypes
'* Microsoft IE4              | Netscape NN4                                      | Beskrivelse
'* "image/gif"                | "image/gif"                                        | CompuServe Graphics Interchange (.gif)
'* "image/pjpeg"              | "image/jpeg"                                      | JPEG/JFIF Compliant (.jpg | .jif | .jpeg)
'* "application/octet-stream" | "application/msexcel"                              | Microsoft Excel-regneark (.xls)
'* "application/octet-stream" | "application/msword"                              | Microsoft Word-dokument (.doc)
'* "text/html"                | "text/html"                                        | HTML Document (.htm | .html)
'* "text/plain"              | "application/x-unknown-content-type-asp_auto_file" | Active Server Page (.asp)
'* "text/plain"              | "text/plain"                                      | Tekstdokument (.txt)
'* "text/plain"              | "application/x-unknown-content-type-Excel.CSV"    | Separeret fil (.csv)
'* "application/octet-stream" | "application/octet-stream"                        | Binær fil (.bin)
'* "application/octet-stream" | "application/octet-stream"                        | Uden kendt filtype (.lol)
'* Bemærk i øvrigt, at
'* a. Der er desværre forskel på den tekst Microsoft og Netscape anvender på samme filtype.
'* b. Microsoft evaulerer ikke kun filens efternavn, men også det faktiske indhold!

Function FileUpload(strPath, intMaxSize, arrAcceptType, arrAcceptExt, ByRef strContentType, ByRef strFilename, ByRef intFileTotalBytes)
    'Variable deklaration
    Dim intPostTotalBytes, intStartPos, intEndPos, i
    Dim bstrPostData, bstrDivider
    Dim strTemp, strFileSpec
    Dim arrSplit
    Dim vbCrLfB
    Dim bolStopLoop, bolContentTypeOK, bolExtOK
    Dim fs, ts, f

    'Sæt returværdier
    strContentType = ""
    strFilename = ""
    intFileTotalBytes = 0

    'Check: Er det faktisk POST upload?
    If Request.ServerVariables("REQUEST_METHOD") = "POST" Then

        'Dan vbCrLf som binær streng
        vbCrLfB = ChrB(13) & ChrB(10)

        'Hent den binære POST fra brugeren
        intPostTotalBytes = Request.TotalBytes 'Find antallet af bytes i POST
        bstrPostData = Request.BinaryRead(intPostTotalBytes) 'Hent POST til en binær streng
        If LenB(bstrPostData) <> intPostTotalBytes Then 'Check: Er antallet af bytes i POST forskelligt fra den binære streng?
            'Returner værdi og stop
            FileUpload = 1
            Exit Function
        End If

        'Hent delelinien inkl. vbCrLfB (altid hele første linje)
        bstrDivider = LeftB(bstrPostData, InStrB(bstrPostData, vbCrLfB) + 1)

        'Default StartPos
        intStartPos = 1

        'Find Content-Disposition hvor name="fileupload"
        bolStopLoop = False
        Do
            'Find starten af denne Content del (umiddelbart efter delelinien)
            intStartPos = InStrB(intStartPos, bstrPostData, bstrDivider) + LenB(bstrDivider)
            If intStartPos = 0 Then
                'Ikke flere Content delere - Returner værdi og stop
                FileUpload = 2
                Exit Function
            End If

            'Find slutningen af denne Content del (umiddelbart inden den næste delelinie)
            intEndPos = InStrB(intStartPos, bstrPostData, bstrDivider)
            If intEndPos = 0 Then
                'Ikke flere Content delere - Returner værdi og stop
                FileUpload = 2
                Exit Function
            End If

            'Hent denne Content-Disposition (uden vbCrLf)
            strTemp = bin2str(MidB(bstrPostData, intStartPos, InStrB(intStartPos, bstrPostData, vbCrLfB) - intStartPos))

            'Er fileupload feltet i denne Content-Disposition?
            If InStr(LCase(strTemp), "name=""fileupload""") > 0 Then
                'Stop løkken her
                bolStopLoop = True
            Else
                'Start igen umiddelbart efter denne Content, men før næste divider
                intStartPos = intEndPos
            End If
        Loop Until bolStopLoop

        'Flyt intStartPos til efter Content-Disposition linjen
        intStartPos = intStartPos + Len(strTemp) + 2

        'Ekstrakt POST filnavnet fra strTemp
        arrSplit = Split(strTemp, ";") 'Opdel strTemp ved ;: Content-Disposition: form-data; name="fileupload"; filename="filen.txt"

        'Find filnavnet fra filename= array
        strTemp = "" 'Værdi ved fejl
        For i = 0 To UBound(arrSplit) 'Køres for alle i denne array
            If LCase(Left(Trim(arrSplit(i)), 9)) = "filename=" Then 'Står der filename= ?
                strTemp = Trim(arrSplit(i))
                Exit For
            End If
        Next

        'Afbryd hvis der ikke blev fundet noget filnavn
        If strTemp = "" Or strTemp = "filename=""""" Then
            FileUpload = 3
            Exit Function
        End If

'---------------------------------------filnavnet !!!!-----------------------------------------------------
        'Find filnavnet
        strFilename = server.UrlEncode(strFileName)
    strFilename = strFileName
    arrSplit = Split(strTemp, """")        'Opdel streng ved "
        strTemp = arrSplit(UBound(arrSplit) - 1) 'Næstsidste indholder filnavn
        arrSplit = Split(strTemp, "\") 'Del ved alle \  Så indeholder den sidste filnavn.ext"
    strFilename = arrSplit(UBound(arrSplit)) 'Hent den sidste array, der må være filnavnet - både fornavn og efternavn



'If LCase(right(strFileName,3)) = "jpg" Then
'strFileName = Session("ID") & ".jpg"
'ElseIf LCase(right(strFileName,3)) = "gif" then
'strFileName = Session("ID") & ".gif"
'ElseIf LCase(right(strFileName,4)) = "jpeg" then
'strFileName = Session("ID") & ".jpeg"
'End If



        'Dan det fulde outputfilnavn via MapPath
    strFileSpec = Server.MapPath(LCase(strPath & strFilename)) 'LCase kan evt fjernes herfra
    'strFileSpec = LCase(strFilename) 'LCase kan evt fjernes herfra


'------------------------------------------filnavn slut!!!!!----------------------------------------------


        'Hent Content-Type (uden vbCrLf)
        strTemp = bin2str(MidB(bstrPostData, intStartPos, InStrB(intStartPos, bstrPostData, vbCrLfB) - intStartPos))

        'Flyt intStartPos til efter Content-Type linjen
        intStartPos = intStartPos + Len(strTemp) + 2

        'Ekstrakt POST Content-Type
        arrSplit = Split(strTemp, " ")
        strContentType = arrSplit(UBound(arrSplit))

        'Skal Content-Type checkes?
        bolContentTypeOK = False
        If arrAcceptType(LBound(arrAcceptType)) <> "" Then
            For Each strTemp In arrAcceptType
                If strContentType = strTemp Then
                    bolContentTypeOK = True
                End If
            Next

            'Check: Er det en accepteret Content-Type?
            If Not bolContentTypeOK Then
                'ContentType ikke fundet - Returner værdi og stop
                FileUpload = 4
                Exit Function
            End If
        End If

        'Skal ekstention checkes?
        bolExtOK = False
        If arrAcceptExt(LBound(arrAcceptExt)) <> "" Then
            For Each strTemp In arrAcceptExt
                If LCase(Right(strFilename, Len(strTemp))) = strTemp Then
                    bolExtOK = True
                End If
            Next

            'Check: Er det en accepteret ekstention?
            If Not bolExtOK Then
                'Ekstention ikke fundet - Returner værdi og stop
                FileUpload = 5
                Exit Function
            End If
        End If

        'Find faktiske start/slut på datafilen ved at fjerne foranstillede og efterstillede vbCrLfB
        intStartPos = intStartPos + 2
        intEndPos = intEndPos - 2
        intFileTotalBytes = intEndPos - intStartPos

        'Skal filstørrelsen checkes?
        If intMaxSize > 0 Then
            'Check: Er filen for stor?
            If intFileTotalBytes > intMaxSize Then
                'Filen er for stor - Returner værdi og stop
                FileUpload = 6
                Exit Function
            End If
        End If

        'Åbn, skriv og luk outputfilen
        Set fs = CreateObject("Scripting.FileSystemObject") 'Filsystem objekt
        Set ts = fs.CreateTextFile(strFileSpec, True) 'Åbn outputfil, overskriv evt. eksisterende
        For i = intStartPos To intEndPos - 1
            ts.Write(Chr(AscB(MidB(bstrPostData, i, 1)))) 'Skriv data eet tegn af gangen
        Next
        ts.Close 'Luk outputfil

        'Check: Blev filen oprettet og har den samme størrelse?
        Set f = fs.GetFile(strFileSpec)
        If f.Size <> intFileTotalBytes Then
                FileUpload = 7
                Exit Function
        End If

        '* Returner OK
        FileUpload = 0
    End If
End Function

'* Funktion der oversætter en bstr binær streng til en almindelig streng
'* Pas på med 00 værdier, da de fungerer som EOF i en almindelig streng
Function bin2str(bstrBinary)
    Dim i
    For i = 1 To LenB(bstrBinary)
      bin2str = bin2str & Chr(AscB(MidB(bstrBinary, i, 1)))
    Next
End Function

'-------------------- Slut: fileupload.asp --------------------
%>
Avatar billede mm12010 Nybegynder
02. april 2003 - 12:53 #24
spændende - takker :o)
Avatar billede ferstin Nybegynder
02. april 2003 - 12:56 #25
Kan det være selve scriptet der gør, at det går så langsomt?
Avatar billede mm12010 Nybegynder
02. april 2003 - 12:59 #26
måske - jeg ikke lige tid til at kigge på det nu, men jeg skal nok sige til, hvis jeg finder noget mistænksomt. :o)
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