Via sida1.asp och sida2.asp skickar jag filer till en speciell mapp!Hämta endast filnamnet
Nu vill jag bara skicka filnamnet till sida2.asp och fånga filnamnet i en session (fName)!
Vilken kod i sida2.asp ska plockas bort för att endast filnamnet ska skickas, eller går det att göras enklare?
sida1.asp:
<code>
<html>
<form action="sida2.asp" enctype="multipart/form-data" method="post" name="f" id="f">
Välj en fil:<br>
<input type="file" name="test" size="50"><br>
<input type="radio" name="filename" value="original" checked>
Använd originalnamnet
<br>
<input type="radio" name="filename" value="userSpecified">
Använd följande namn:
<input type="text" name="userSpecifiedName" value="">
<br>
<input type="submit" value="skicka filen">
</form>
</html>
</code>
sida2.asp:
<code>
<%
' Justera tiden beroende på hur stora filer du kommer tillåta att skicka
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")
' 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
%>
<html>
<body>
<% If ErrMsg = "" Then %>
Du valde filen: <br>
<% Response.Write fName %>
<% Else %>
<%= ErrMsg %>
<% End If %>
</body>
</html>
</code>