Avatar billede starf Nybegynder
18. april 2001 - 21:49 Der er 10 kommentarer og
1 løsning

Upload Script....

Hej
Jeg er ved at lave et upload script hvor man kan skrive en sti til ens web server dir. og den uploader dertil.. men kan ikke få det til at virke.. har detsvære ikke mere end 45 point at give.. da de er de sidste jeg har...

Min kode er som følgende

uploadgfx.asp :

<%@ Language=\"VBScript\" %>
<%  Option Explicit %>
<link rel=\"stylesheet\" type=\"text/css\" href=\"admin.css\">
<!-- #INCLUDE FILE=\"fileupload.inc\" -->

<HTML>
<HEAD>
<TITLE>Upload uden komponent</TITLE>
</HEAD>
<BODY bgcolor=\"#00477b\">

<%
    \'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=\"Action\" TYPE=\"submit\" VALUE=\"Upload\">
</FORM>
<form method=\"post\" action=\"imgslet.asp\">
<input type=\"submit\" value=\"Slet Image List\">
</form>
<form name=\"uploadpath\" type=\"post\"><BR>
<input type=\"text\" value=\"skriv dit fornavn\" name=\"fornavn\" size=\"30\">
</form>
<%
    Else
        Dim intFileUpload, strContentType, strFilename, intFileTotalBytes

        intFileUpload = FileUpload(= Request(\"uploadpath\"), 900000000, Array(\"image/gif\", \"image/jpeg\", \"image/pjpeg\"), Array(\"gif\", \"jpg\"), strContentType, strFilename, intFileTotalBytes)

        If intFileUpload = 0 Then
            Response.Write \"Filen \" & strFilename & \" blev uploaded.<BR>\"
            Response.Write \"Det er en fil af typen \" & strContentType & \" og den fylder \" & intFileTotalBytes & \" bytes:<BR>\"
            Response.Write \"<IMG SRC=\"=\'\" & Request(\"uploadpath\")\" & strFilename & \"\"\"><BR>\"
        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
%>


</BODY>
</HTML>


fileupload.inc filen ser sådan her ud:

<%
\'-------------------- Start: fileupload.inc --------------------

Dim strPath
strPath = \"Billeder/\"

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

        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

        \'Find filnavnet
        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

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

        \'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.inc --------------------
%>
Avatar billede ellebaek Nybegynder
19. april 2001 - 12:05 #1
hvad er problemet med det script ??


Avatar billede ellebaek Nybegynder
19. april 2001 - 12:05 #2
altså hvilken fejl får du ud af at køre scriptet ?
Avatar billede ellebaek Nybegynder
19. april 2001 - 12:16 #3
oki ...
så gætter jeg for dig ...
jeg går ud fra at din fejl er at du ikke kan uploade alle forskellige filer...

det gør du ved at ændre i linien ...
intFileUpload = FileUpload(= Request(\"uploadpath\"), 900000000, Array(\"image/gif\", \"image/jpeg\", \"image/pjpeg\"), Array(\"gif\", \"jpg\"), strContentType, strFilename, intFileTotalBytes)


så den kommer til at se ud som følgende ...
intFileUpload = FileUpload(= Request(\"uploadpath\"), 900000000, Array(\"\"), Array(\"\"), strContentType, strFilename, intFileTotalBytes)

Avatar billede ellebaek Nybegynder
19. april 2001 - 12:18 #4
og dog ...


fejlen du får er sikkert at du ikke kan benytte Request sammen med den anden metode ...
Jeg kan ikke lige huske hvad den hedder ...

Men hvis det er problemet bliver du nødt til at lave det gennem 2 asp sider, hvor du så fører oplysningerne videre med sessions !!
Avatar billede starf Nybegynder
19. april 2001 - 17:01 #5
problemet er..
den gider ikke uploade til det dir jeg står i.. har forsøgt at tilføje et tekst felt, hvor man skriver sti i... men den skriver noget med
at fil størelse = 0 og den derforikke kan fuldføre det.
Avatar billede www.triffid.dk Nybegynder
19. april 2001 - 20:45 #6
hey starf.
Når du engang får dit script til at virke, så ville jeg blive glad hvis du ville \"give\" mig det.
For det første står jeg selv og mangler sådan et script og så har jeg på min side en samling af asp-scripts (eller det kommer der!) og der ville dit script passe fint....På forhånd tak :)
Avatar billede starf Nybegynder
19. april 2001 - 21:57 #7
triffid.. det virker vist nu... more or less..
Avatar billede www.triffid.dk Nybegynder
19. april 2001 - 22:13 #8
ok...hvis du så ville sende den til triffid@triffid.dk så jeg kan se på det.... Der vil selvfølgelig stå at det er dig der har udviklet det og eventuelt din  hp...
Avatar billede ellebaek Nybegynder
22. april 2001 - 15:50 #9
hvad mener du med at det ikke vil uploade i det dir du står i ??

hvad er det for et dir ...?
Avatar billede ellebaek Nybegynder
22. april 2001 - 16:17 #10
http://www.activeserverpages.dk/download/default.asp?mode=showdownload&id=79

http://www.activeserverpages.dk/aspdigital/kapitel6/upload_write.asp

Det er utroligt hvor meget disse script, især det første minder om dit script ...

www.triffid.dk, du skal nok ikke skrive starf som udvikler af scriptet, det eneste han har gjort er at ændre designet.... derimod er det Lars Snyder (pila@mailme.dk)  du skal spørge om du kan få scriptet på din side ...

og grunden til, at du starf ikke kan uploade til en mappe, som du selv taster ind, er at du deffinere mappen i starten af fileupload.inc

Dim strPath
strPath = \"Billeder/\"

der siger den at den skal uploade til mappen billeder/

du kan godt gøre det på den anden måde, men det kræver mappen findes på serveren. Dokumentet kan ikke lave mapper på din server ...
Avatar billede starf Nybegynder
23. april 2001 - 01:27 #11
Hmmmm har sku ikke taget noget af en Lars Snyder..
har taget noget af en eller anden .. skal nok lige finde hans navn..

mener at scriptet bare uploader i roden.. men drop det nu.. har fået det til at virke.. Hmm mangler en funktion til atlukke den her med.. uden at man skal oprette svar selv..
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

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