Dynamisk sti i upload-script
Jeg er i gang med et slags opgave-arkiv, som består af 2 dele; en database med informationer om den enkelte opgave samt en række mapper pr. opgave indeholdende filer til hver enkelt opgave. Databasen indeholder tekst-feltet ’bibliotek’ som indeholder navnet på opgavens mappe og er nøglen til kobling mellem poster i db og de fysiske fil-mapper.Informationer om den enkelte opgave hentes fra databasen afhængig af værdien id fra URL og vises i opgaver.asp. I opgaver.asp vises også en liste med filer fra den tilhørende mappe vha. fso og GetFolder.
Der er også i opgaver.asp et link til upload.asp, som er et simpelt (uden komponent) men hurtigt script hvor der kan uploades filer til en mappe. Det jeg ikke kan få til at virke er at gøre upload-stien dynamisk, altså baseret på værdien id fra URL og den deraf følgende variabel ”path” (dannet med BuildPath), for dermed at sikre at upload sker til den rette mappe ifht. opgave. Jeg kan kun få det til at virke, hvis jeg skriver en ”absolut” sti – f.eks. ("../opgaver/Interne opgaver") som i upload.asp nedenfor.
Kan jeg gøre upload-stien dynamisk ?
En anden ting der driller mig, er mapper navngivet med flere ord adskilt med mellemrum -
f.eks. mappen ”Interne opgaver”. I opgaver.asp laver jeg et link til den aktuelle mappe vha. variablen ’path’, men selvom stien (variablen strLink) udskrives korrekt med Response.Write, så peger linket ikke rigtig hvis det drejer sig om mapper navngivet med flere ord adskilt med mellemrum – f.eks. vil førnævnte mappe pege på D:\wwwroot\opgaver\Interne og ikke D:\wwwroot\opgaver\Interne opgaver.
Hvad skyldes det og hvad er løsningen ?
Det jeg bruger linket til, er at åbne mappen i Explorer, for derved at kunne slette og omdøbe filer. Er det muligt at bruge Metoderne (f.eks. DeleteFile, CopyFile, MoveFile osv.) i FSO i stedet ?
Glæder mig til at høre fra jer ;)
UDPLUK AF SCRIPTS:
/Opgaver.asp/
<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath ("../db/db.mdb")
Conn.Open DSN
' Hent fra databasen afhængig af værdien id fra URL
strSQL = "Select * From Opgaver Where Id = " & Request.Querystring("id")
Set rs = Conn.Execute(strSQL)
' Laver dynamisk sti udfra feltet /bibliotek/ i database
dim fs,path
set fs=Server.CreateObject("Scripting.FileSystemObject")
path=fs.BuildPath("..\opgaver\",rs("bibliotek"))
strLink = "<A HREF= "& (Server.MapPath(path)) &" target=""_blank"">"& (Server.MapPath(path)) &"</A>"
set fs=nothing
' Skriv opgavens data (her er kun ’Sti til filer:’ vist)
Response.Write "<p>Sti til filer: " & strLink & ""
Conn.Close
set fs=nothing
Set Conn = Nothing
%>
Desuden dannes en liste med filer fra den tilhørende mappe vha. fso og GetFolder. Her benyttes variablen path – det virker også med mappenavne med flere ord adskilt med mellemrum.
/Upload.asp/
<%
Dim UPLOAD_PATH
UPLOAD_PATH = Server.MapPath("../opgaver/Interne opgaver")
Dim g_oFso, g_oFolder, g_oFile
Set g_oFso = Server.CreateObject("Scripting.FileSystemObject")
Set g_oFolder = g_oFso.getFolder(UPLOAD_PATH)
If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then
Dim g_oUpload
Set g_oUpload = get_upload_files()
Dim fpos, fcontent
Fcontent = g_oUpload("upload").Item("content")
Set g_oFile = g_oFso.CreateTextFile(UPLOAD_PATH & "\" & extract_filename(g_oUpload("upload").Item("filename")))
For fpos = 1 to LenB(fcontent)
g_oFile.Write chr(AscB(MidB(fcontent, fpos, 1)))
Next
g_oFile.Close: Set g_oFile = Nothing
Response.Redirect Request.ServerVariables("SCRIPT_NAME")
End If
