Avatar billede moejensen Nybegynder
01. maj 2002 - 20:57 Der er 8 kommentarer og
1 løsning

Upload med SAFileUp

Jeg er ved at lave et modul, hvor en bruger kan vælge en fil, lave en beskrivelse til det, og vælge om det er taget lodret eller vandret. Mit problem er nu bare at jeg ikke kan få selve uploads delen til at virke. Det er meningen at filen skal gemmes i en mappe på serveren, og filnavnet og de andre gemmes i en database sammen med de andre indtastede oplysninger. i databasen er der en tabel der hedder image, der indeholder følgende attributter:

ImageID - Autonumber
beskrivelse - meno
UID - number
bsid - number
sti - text
billedenavn - text
lodret - YES/NO

Den kode, hvor oplysningerne indtastes ser således ud:

<% mode=request("mode")
'---Vis tilgængelige billedserier------------------------------------------------------------------------------
  if mode="upload" then %>

<p>&nbsp;</p>
<p><font face="Verdana" size="4">Vælg det billede du ønsker at uploade i
billedeserien <%Response.write request.form("D1")%></font></p>
<form method="POST" action="upload_billede.asp?mode=upload2">
<table width="782">
<tr>
  <TD ALIGN="RIGHT" VALIGN="middle" width="155"><font size="2"><font face="Verdana">Vælg fil her: </font>:</font></TD>
  <TD ALIGN="LEFT" width="613"><INPUT TYPE="FILE" NAME="FILE1"></TD>
</tr>
<TR>
<TD ALIGN="RIGHT" VALIGN="middle" width="155"><font face="Verdana" size="2">Vælg
  om billedet er taget lodret eller vandret</font></TD>
<TD width="613"><font face="Verdana" size="2"><input type="radio" value="V1" checked name="R1">Lodret</font>&nbsp;&nbsp;&nbsp;
  <font face="Verdana" size="2"><input type="radio" name="R1" value="V2">Vandret</font></TD></TR>
<TR>
<TD ALIGN="RIGHT" VALIGN="middle" width="155"></TD>
<TD width="613"><INPUT TYPE="SUBMIT" NAME="SUB1" VALUE="Upload"></TD></TR>
</TABLE>
</FORM>

Det jeg har lavet indtil nu på upload scribtet ser således ud:

<% mode=request("mode")
'---Vis tilgængelige billedserier------------------------------------------------------------------------------
  elseif mode="upload2" then %>

<%
Set upl = Server.CreateObject("SoftArtisans.FileUp")
upl.Path = server.mappath("billeder/")

%>

<% if upl.IsEmpty Then %>
Du skal vælge en fil før du vælger at uploade.
<% ElseIf upl.ContentDisposition <> "form-data" Then %>
Dit upload fejlede, det skyldes eventuelt at din browser ikke understøtter denne funktion. Hvis fejlen opstår igen, kontakt mig da venligst:
<a href="mailto:webmaster@moe-jensen.dk">Webmaster@Moe-Jensen.dk</a>

<%Else %>
<p>Filen blev uploadet korekt</p>
<%

Set imageConn = Server.CreateObject("ADODB.Connection")
imageConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("image.mdb")

set rsBlob = Server.CreateObject("adodb.recordset")
rsBlob.Open "image", imageConn, 2, 3

rsBlob.AddNew
upl.SaveAsBlob rsBlob.Fields("filecol")
'--- Add file name
FileName = Mid(upl.UserFilename, InstrRev(upl.UserFilename, "\") + 1)
Response.Write "<br>File name send to Access database:" & Filename & "<br>"
rsBlob.Fields("Filename") = FileName
'---
rsBlob.Update
rsBlob.Close
Set rsBlob = Nothing

%>
<% End If %>
<%Response.Redirect ("upload_billede.asp?mode=validt")%>

Det jeg har lavet er en tilretning af et eksempel der fulgte med SAFileUp, så der mangler noget hist og her og noget af det er sikkert forkert.

Håber der er nogen der kan hjælpe
Avatar billede mskjoldp Novice
03. maj 2002 - 12:07 #1
Hej
Det kan være jeg kan hjælpe dig med uploadningen, men jeg skal lige hjem først. Jeg har en løsning magen til, dog kun SAFileUp dele, men skulle men at jeg kan guide dig gennem.

Er hjemme ved 17:00 tiden.

Vh Skjold
Avatar billede moejensen Nybegynder
05. maj 2002 - 08:50 #2
Det lyder helt super
Avatar billede mskjoldp Novice
05. maj 2002 - 14:26 #3
Her er de to filer der får min upload til at virke. Jeg vil ikke her prøve at forklare alt hvad der sker i filerne, men copy and paste indholdet og test det af. Husk at ligge include filen i korrekt biblotek.
upload.asp
fileupload.inc

----start på upload.asp-------------
<!-- #INCLUDE FILE="fileupload.inc" -->
<%If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then%>
<p align="center">Billedeupload til Web site.<p></p>
<div id="upload">De billeder du vælger fra din computeren må ikke indeholde mellemrum i billedenavnet. Eks.: <em>Maxi
87.jpg</em>, mellemrummet mellem i 8, kan ikke forstås af scriptet. Hvis billedenavnet
indeholder mellemrum, skal du omdøbe navnet, det gøres b.la. i Windows Stifinder. Erstat
mellemrummet med et &quot;_&quot; så navnet på billedet bliver til: <em>Maxi_87.jpg</em></div>
<form ENCTYPE="multipart/form-data" ACTION="Upload.asp" Name="upload" METHOD="POST">
  <div align="center"><center><table border="0" width="100%">
    <tr>
      <td width="100%" align="center" bgcolor="#000080"><font color="#FFFFFF"><small>Vælg et billede (kun gif eller jpg):</small><br>
      <input Size="45" NAME="fileupload" TYPE="file" onFocus="this.style.backgroundColor='#6699ff';"><br>
      <small>MAX 400 Kilobyte&nbsp; </small><input NAME="Action" TYPE="submit" VALUE="Send billede til galleriet"></font></td>
    </tr>
  </table>
  </center></div>
</form>
<%Else
Dim intFileUpload, strContentType, strFilename, intFileTotalBytes, text
intFileUpload = FileUpload("log/", 409600, Array("image/gif", "image/jpeg", "image/pjpeg"), Array("gif", "jpg"), strContentType, strFilename, intFileTotalBytes)
If intFileUpload = 0 Then
Response.Write "<br><IMG SRC=""log/" & strFilename & """>"
Response.Write "<br><font size=3>Filen " & strFilename & " blev uploaded."
Response.Write "<br><font size=3>Det er en fil af typen " & strContentType & " og den fylder " & intFileTotalBytes & " bytes"
Else
Response.Write "<font size=3><p>Der opstod en fejl under upload! dette kan skyldes at filnavnet allerede eksisterer - <br>Prøv at give dit billede et andet navn.<BR>"
Response.Write "<font size=3>Fejl nr: " & intFileUpload & "<BR>"
Response.Write "<font size=3>Filnavn: " & strFilename & "<BR>"
Response.Write "<font size=3>Filtype: " & strContentType & "<BR>"
Response.Write "<font size=3>Filstørrelse: " & intFileTotalBytes & "<BR>"
End if
End if%>
-----slut på filen upload.asp---------


-------start på fileupload.inc -------
<%
'-------------------- Start: fileupload.inc --------------------

'*** FileUpload                          ***
'*** af Lars Snyder (pila@mailme.dk)  / omskrevet af F.J. $trachotta / LVG
'*** 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, mappe

    '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

        '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
   
   
        response.write strpath & strfilename
   
        'Dan det fulde outputfilnavn via MapPath
        strFileSpec = Server.MapPath(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 --------------------
%>
---------slut på filen fileupload.inc -------------

vh skjold
Avatar billede moejensen Nybegynder
05. maj 2002 - 14:42 #4
Jeg prøver at kigge på det.
Avatar billede mskjoldp Novice
05. maj 2002 - 14:52 #5
Der hvor der står "log" er den mappe jeg uploader til.

------upload.asp---
<%Else
Dim intFileUpload, strContentType, strFilename, intFileTotalBytes, text
intFileUpload = FileUpload("log/", 409600, Array("image/gif", "image/jpeg", "image/pjpeg"), Array("gif", "jpg"), strContentType, strFilename, intFileTotalBytes)
If intFileUpload = 0 Then
Response.Write "<br><IMG SRC=""log/" & strFilename & """>"
------upload.asp-------

vh skjold - det kunne jo godt være du bruger en anden mappe    :) heh
Avatar billede moejensen Nybegynder
07. maj 2002 - 16:23 #6
Så vidt jeg kan se bruger dit eksempel hverken safileup eller en database, er det korekt?
Avatar billede mskjoldp Novice
08. maj 2002 - 18:16 #7
Hov du har ret. Jeg bruger ASPSimpelUpload: http://www.asphelp.com/Downloads/Default.htm
Download den her og installer komponenten. Er det ok?

vh Skjold
Avatar billede moejensen Nybegynder
09. maj 2002 - 10:52 #8
Det kan jeg ikke bruge, da mit webhotel ikke understøtter det :-)

Jeg har fået lavet en kode der virkede, men ellers tak for hjælpen
Avatar billede mskjoldp Novice
09. maj 2002 - 11:33 #9
selv tak :)
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