Avatar billede nythjem Nybegynder
16. juli 2004 - 12:39 Der er 4 kommentarer og
1 løsning

Lav thumbnail efter upload

Hej Alle!

Jeg har et super upload script, der funger fint selvstændigt, og et thumbnail script, der også gør det.

Men nu vil jeg have integreret det i mit upload script, så der automatisk bliver oprettet en thumbnail. Jeg troede det skulle gøres efter uploaden var færdig, men jeg får følgende fejl.

Microsoft VBScript runtime error '800a01f4'
Variable is undefined: 'Jpeg'

Herunder er mit Uploads script, og mit thumbnail script. Hvor skal jeg lige placere mit thumbnail script for at det fungerer?

På forhånd tak!


############### UPLOAD & THUMBNAIL SCRIPT #################

<%@ Language="VBScript" %>
<% Option Explicit %>

<%
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

'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


' ########### ANGIV FIL NAVN ###########################
Dim Passgenerat
Dim intNum
Dim intUpper
Dim intRand
Dim intLower
Dim strPass
Passgenerat = ""
Randomize
For i = 1 to 15
intNum = Int(10 * Rnd + 48)
intUpper = Int(26 * Rnd + 65)
intLower = Int(26 * Rnd + 97)
intRand = Int(3 * Rnd + 1)
Select Case intRand
Case 1
strPass = Chr(intNum)
Case 2
strPass = Chr(intUpper)
Case 3
strPass = Chr(intLower)
End Select
Passgenerat = Passgenerat & strPass
Next
Session("Ads_Rand") = Passgenerat
strFilename = "PIC" & Session("kundeid") & "" & session("Ads_Rand") & ".jpg"
' ########################################################



'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
%>

<% Server.ScriptTimeout = 720 %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Upload billede</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<style>

td, body, input, select, textarea {    FONT-FAMILY: Verdana, Garamond, Helvetica;
    FONT-SIZE: 8pt;
}

body {background-image:url(gfx/uploadbg.jpg);}

body, form {margin:20}

a:link {color:333366}
a:visited {color:333366}
a:hover {color:black}

.tophead {color:white;font-weight:bold;border-bottom:1 solid #336699}
.texthead {}

a.text:link {color:f0f0f0;text-decoration: none}
a.text:visited {color:f0f0f0;text-decoration: none}
a.text:hover {color:f0f0f0;text-decoration: underline}

.fc {width:230}

.orange{background-color:}
.blue{background-color:#AABBCF}
.dgray{background-color:#FF9500}
.lgray{background-color:#F0F0F0}


</style>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">


<script>
    function setValue(picname) {
    opener.document.pzform.pic<% =request("enhed") %>.value = ""+picname+""
    window.close()
    }

    function setProcs() {
    document.pzform.notuse.value = 'VENT MENS FILEN UPLOADES!';
    }
</script>



<%
'Skal formen vises?
If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then
%>
<FORM ENCTYPE="multipart/form-data" ACTION="?placering=<% =request("placering") %>&enhed=<% =request.querystring("enhed") %>" METHOD="POST" name="pzform">
<P>Vælg et billede: <b>Max. 300 Kb. (.jpg, .gif, .jpeg, .bmp)</b><BR>
<INPUT NAME="fileupload" TYPE="file"><BR>
<INPUT NAME="Action" TYPE="submit" onclick="setProcs();" VALUE="Upload"><br><br>
<input name="notuse" value="" style="width:100%;border:0">
</FORM>

<%
Else
Dim intFileUpload, strContentType, strFilename, intFileTotalBytes

intFileUpload = FileUpload("../billeder/", 300000000, Array("image/gif", "image/jpeg", "image/pjpeg", "image/bmp"), Array("gif", "jpg"), strContentType, strFilename, intFileTotalBytes)

' ########### THUMNAIL ###########################
' Create instance of AspJpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")
   
' Compute path to source image
Path = Server.MapPath("billeder") & "\" & strFilename

' Open source image
Jpeg.Open Path

' Gør billede til 200 x 200
Jpeg.Width = 200
Jpeg.Height = 200

' Apply sharpening if necessary
Jpeg.Sharpen 1, 130

' create thumbnail and save it to disk
Jpeg.Save Server.MapPath("billeder") & "\" & strFilename & "_sm.jpg"
' ########### THUMNAIL /// SLUT #####################

If intFileUpload = 0 Then
session("keep_uploadfile") = strFilename
'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=""../billeder/" & strFilename & """><BR>"
%>
<b>Billedet er uploadet !<br><br>

<a href="java script:setValue('<% =strFilename %>');">Indsæt billedet ved at trykke her!</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
%>
</BODY>
</HTML>
Avatar billede joyzer Nybegynder
16. juli 2004 - 13:08 #1
/bump

:) håber du får svar.. jeg abonnerer lige, da jeg har samme problem !
Avatar billede hiks Nybegynder
16. juli 2004 - 14:47 #2
hvilken linie får du fejl i?

/hiks
Avatar billede joyzer Nybegynder
16. juli 2004 - 14:48 #3
Jeg er blot med på en lurer !
Avatar billede hiks Nybegynder
16. juli 2004 - 15:09 #4
i første omgang så kig på din option explicit i toppen ellers tilføj nederst omkring din thumb tingest

dim path, jpeg

/hiks
Avatar billede nythjem Nybegynder
16. juli 2004 - 16:35 #5
Ja Hej Hiks..

Det tænkte jeg også i starten, men og jeg difinerede da også Jpeg, men den blev ved, så jeg har såmand bare opstillet nogle betingelser, og så opretter jeg nogle thumbs, når jeg gemmer resten af tekst informationerne i databasen..

God weekend til alle.. :)
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