Jag testade pelles uploadscript (http://www.pellesoft.nu/login/articles/asp/fileupload.asp) men nått gick galet och processorn på servern börja gå på högvarv. Inetinfo.exe använde helt plösligt 99% av all prossesorkraft. Det vore lättare om man fick nått med, det kommer inget. Servern bara står och tuggar och tuggar.Pelles uploadscript
Här är koden som jag använder, direkt kopierat från pelle:
<code>
Server.ScriptTimeout = 5400
Const ForWriting = 2
Const TristateTrue = -1
CrLf = Chr(13) & Chr(10)
'Denna funktion hämtar ett fälts namn
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
'Denna funktion hämtar fältets värde i filnamn
Function GetFileName(infoStr)
sPos = InStr(infoStr, "filename=")
EndPos = InStr(infoStr, Chr(34) & CrLf)
GetFileName = Mid(infoStr, sPos + 10, EndPos - (sPos + 10))
End Function
' Denna funktion hämtar ett filens MIMEtyp
Function GetFileType(infoStr)
sPos = InStr(infoStr, "Content-Type: ")
GetFileType = Mid(infoStr, sPos + 14)
End Function
PostData = ""
' Hämtar hela headern som postats genom att hämta headerns storlek med dess data
Dim biData
biData = Request.BinaryRead(Request.TotalBytes)
' Tänk nu på att det är binär data så vi måste ändra detta till
' någonting som är hanterbart och läsbart.
For nIndex = 1 to LenB(biData)
PostData = PostData & Chr(AscB(MidB(biData,nIndex,1)))
Next
' När du använt BinaryRead så kan du inte använda Request-objektet. Därför måste vi
' hantera alla request-variablerna själva genom att hämta ut detta
ContentType = Request.ServerVariables( "HTTP_CONTENT_TYPE")
' delar upp datat
ctArray = Split(ContentType, ";")
' En fil som postas fungerar endast om du i formen satt "multipart/form-data"
' - så vi kontrollerar att det är gjort
If Trim(ctArray(0)) = "multipart/form-data" Then
ErrMsg = ""
' Hämta all data om formen
bArray = Split(Trim(ctArray(1)), "=")
Boundary = Trim(bArray(1))
' Splitta upp all denna indata
FormData = Split(PostData, Boundary)
' Dela upp informationen för varje variabel och data
Dim myRequest, myRequestFiles(9, 3)
Set myRequest = CreateObject("Scripting.Dictionary")
FileCount = 0
' För varje fält som finns i den postade formen
For x = 0 to UBound(FormData)
' Två CrLf markerar slutet på informationen om ett fält. Allt efter
' det är ett värde
InfoEnd = InStr(FormData(x), CrLf & CrLf)
If InfoEnd > 0 Then
' Hämtar informationen för aktuellt fält utom skräptecken i slutet på strängen
varInfo = Mid(FormData(x), 3, InfoEnd - 3)
' Hämtar värdet på fältet, vi tar bort CrLf både i början och i slitet
varValue = Mid(FormData(x), InfoEnd + 4,Len(FormData(x)) - InfoEnd - 7)
' Är detta filen eller fältet
If (InStr(varInfo, "filename=") > 0) Then
' placera vår fil i en stor array.
' Om du vill ladda upp flera filer på en gång så visas här hur du
' kan göra, men formen du postade från tillåter bara en så då får
' du göra om den så fler filen kan postas.
myRequestFiles(FileCount, 0) = GetFieldName(varInfo)
myRequestFiles(FileCount, 1) = varValue
myRequestFiles(FileCount, 2) = GetFileName(varInfo)
myRequestFiles(FileCount, 3) = GetFileType(varInfo)
FileCount = FileCount + 1
Else
' Detta är ett vanligt fält
myRequest.add GetFieldName(varInfo), varValue
End If
End If
Next
Else
ErrMsg = "Du har fel encoding typ!"
End If
' Om du tillåter mer filer än 1, gör om detta till en loop
' instansierar File ScriptingSystem (FSO)
Set lf = server.createObject("Scripting.FileSystemObject")
' Om du tillåter mer filer än 1, gör om detta till en loop
' instansierar File ScriptingSystem (FSO)
Set lf = server.createObject("Scripting.FileSystemObject")
' vad valde användaren att använda för filnamn?
If myRequest("filename") = "original" Then
' Vad är det för klient som skickar filen, Machintosh skickar endast filnamnet
' medan Windows även skickar med sökvägen till filen.
BrowserType = UCase(Request.ServerVariables("HTTP_USER_AGENT"))
If (InStr(BrowserType, "WIN") > 0) Then
' Det är Windows med sökväg i
sPos = InStrRev(myRequestFiles(0, 2), "\")
fName = Mid(myRequestFiles(0, 2), sPos + 1)
End If
If (InStr(BrowserType, "MAC") > 0) Then
' Det är mac, endast filnamnet skickas
fName = myRequestFiles(0, 2)
End If
' här skapar du filnamnet som vi skall använda
FilePath = "./" & fName
Else
' använd det filnamn som användaren skrev istället
' Om användaren valt att spara med ett eget filnamn,
' då tar vi det istället.
FilePath = "./" & myRequest("userSpecifiedName")
End If
' anger sökvägen dit filen skall sparas
SavePath = Server.MapPath(FilePath)
' skapar objektet för att kunna spara en fil, finns den så skriver vi över den
Set SaveFile = lf.CreateTextFile(SavePath, True)
' Skriver filen (arrayen) till disk
SaveFile.Write(myRequestFiles(0, 1))
' stänger och frigör objektet
SaveFile.Close
</code>
Kod från formuläret:
<code>
<TD>Lägg upp ny bild</TD>
<TD ALIGN="right"><INPUT TYPE="file" NAME="test"></TD>
</TR>
</TABLE>
<P>
<input type="hidden" name="filename" value="userSpecified">
<input type="hidden" name="userSpecifiedName" value="<% =session("id") %>">
<INPUT TYPE="image" SRC="bilder/andra.gif" VALUE="Ändra">
</FORM>
</code>
Nån som har en aning om vad som kan vara fel?Sv: Pelles uploadscript