Avatar billede kivig Nybegynder
01. april 2005 - 10:57 Der er 19 kommentarer og
1 løsning

Slet fil funktion i upload script ?

Jeg har fundet et uploadscript her på siden som fungere perfekt. Jeg kunne dog godt bruge en funktion i scriptet som gør det muligt at slette en fil fra en mappe på serveren.
Her er koden:

<%    @EnableSessionState    = False %>
  <%    Option Explicit %>
  <%    Response.Expires    = 0 %>
  <%
    Dim UPLOAD_PATH
        UPLOAD_PATH    = Server.MapPath("cirkulaere")

    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.write("Filen er uploadet korrekt") 'denne linie skal ændres hvis det skal ændres... Eller der skal mere til..
response.end
        Response.Redirect Request.ServerVariables("SCRIPT_NAME")

    End If

    Response.Write "<html><body><table>"
    Response.Write "<tr><td><hr></td></tr>"
    For Each g_oFile In g_oFolder.Files
        Response.Write "<tr><td><a href=""cirkulaere/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
    Next
    Response.Write "<tr><td><hr></td></tr>"
    Response.Write "<tr><td align=""right""><form name=""frmUpload"" method=""post"" enctype=""multipart/form-data"" action=""" & Request.ServerVariables("SCRIPT_NAME") & """>"
    Response.Write "<input type=""file"" name=""upload""> &nbsp; <input type=""submit"" value=""upload""></td></tr>"
    Response.Write "</table></body></html>"

%>
  <%
    Function get_upload_files()
        Dim    upload_object, request_binaries
        Dim position_start, position_end
        Dim boundary, boundary_pos

        Set upload_object    = Server.CreateObject("Scripting.Dictionary")
        request_binaries    = Request.BinaryRead(Request.TotalBytes)
        position_start        = 1
        position_end        = InstrB(position_start, request_binaries, get_byte_string(chr(13)))
        boundary            = MidB(request_binaries, position_start, (position_end - position_start))
        boundary_pos        = InstrB(1, request_binaries, boundary)

        Do Until (boundary_pos = InstrB(request_binaries, boundary & get_byte_string("--")))
            If Not(Response.IsClientConnected) Then Response.End

            Dim name, pos_file

            position_start    = (InstrB(InstrB(boundary_pos, request_binaries, get_byte_string("Content-Disposition")), request_binaries, get_byte_string("name=")) + 6)
            position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(34)))

            name            = get_string(MidB(request_binaries, position_start, (position_end - position_start)))
            pos_file        = InstrB(boundary_pos, request_binaries, get_byte_string("filename="))

            If  ((pos_file <> 0) AND (pos_file < InstrB(position_end, request_binaries, boundary))) Then
                upload_object.Add name, Server.CreateObject("Scripting.Dictionary")

                position_start    = (pos_file + 10)
                position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(34)))
                upload_object.item(name).Add "filename", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

                position_start    = (InstrB(position_end, request_binaries, get_byte_string("Content-Type:")) + 14)
                position_end    = InstrB(position_start, request_binaries, get_byte_string(chr(13)))
                upload_object.item(name).Add "content-type", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

                position_start    = (position_end + 4)
                position_end    = InstrB(position_start, request_binaries, boundary) - 2
                upload_object.item(name).Add "size", ((position_end - position_start))
                upload_object.item(name).Add "content", MidB(request_binaries, position_start, (position_end - position_start))

            End If
            boundary_pos    = InstrB(boundary_pos + LenB(boundary), request_binaries, boundary)
        Loop

        Set get_upload_files = upload_object

    End Function

    Function get_byte_string(str)
        Dim cnt
        For cnt = 1 to Len(str)
            get_byte_string    = get_byte_string & chrB(AscB(Mid(str, cnt, 1)))
        Next
    End Function

    Function get_string(str)
        Dim cnt
        For cnt = 1 to LenB(str)
            get_string    = get_string & chr(AscB(MidB(str, cnt, 1)))
        Next
    End Function

    Function extract_filename(filename)
        extract_filename    = Right(filename, Len(filename) - InStrRev(filename, "\", -1, 1))
    End Function
%>


Koden lister mappeindhold og giver en uploadfunktion. Hvis man evt. kan ligge et "delete"-link ud fra hver fil som bliver listet kunne det være helt perfekt.

Mvh. Kivig
Avatar billede busschou Praktikant
01. april 2005 - 11:22 #1
Man kan jo lave linket med en querystring som indeholder stien til filen
Når siden loader laves så et test på denne querystring
Hvis den er sat sættes et fso object til at slette filen

Har du et link evt?
Avatar billede busschou Praktikant
01. april 2005 - 11:27 #2
For Each g_oFile In g_oFolder.Files
        Response.Write "<tr><td><a href=""cirkulaere/" & g_oFile.Name & """>" & g_oFile.name & "</a></td>
<td><a href=""link"">slet filen</td></tr>"
Next

Er det der det skal sættes ind?
Avatar billede busschou Praktikant
01. april 2005 - 11:31 #3
for så kunne det være
<a href='dinside.asp?sti='"<%=UPLOAD_PATH&"\"&g_oFile.Name%>">slet filen</a>
----------
Øverst i dinside.asp kunne du så skrive
if request.querystring("sti") <> "" then
  Set sletFSO = CreateObject("Scripting.FileSystemObject")
  sletFSO.DeleteFile(Request.Querystring("sti"))
end if
Avatar billede kivig Nybegynder
01. april 2005 - 11:45 #4
Hej busschou

Jeg har lige prøvet at sætte din kode ind, men ved ikke helt hvor den skal indsættes.
Du kan se den nuværende side her http://www.kooperationen.dk/uploadcirkulaere.asp
stien til mappen er ../www/cirkulaere

:)
Avatar billede busschou Praktikant
01. april 2005 - 11:55 #5
prøv rette:
----------
For Each g_oFile In g_oFolder.Files
  Response.Write "<tr><td><a href=""cirkulaere/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
Next
----------
til
----------
For Each g_oFile In g_oFolder.Files
  Response.Write "<tr><td><a href='uploadcirkulaere.asp?sti='"<%=UPLOAD_PATH&"\"&g_oFile.Name%>">X</a></td><td><a href=""cirkulaere/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
Next
------------------------------
øverst i filen oven over "Dim UPLOAD_PATH" skriver du så
Response.Write (Request.Querystring("sti"))

Det burde lave et kryds foran alle linksne. Når du klikker på krydset bør den refreshe siden og øverst skrive den sti som du ønsker slettet
Når vi ser om det virker så laver vi lige det som sletter filen :op)
Avatar billede busschou Praktikant
01. april 2005 - 11:59 #6
måske er det dumt at røbe sin sti i browseren..så måske er det bedre du skriver:
--------------------------
For Each g_oFile In g_oFolder.Files
  Response.Write "<tr><td><a href='uploadcirkulaere.asp?sletFil='"<%=g_oFile.Name%>">X</a></td><td><a href=""cirkulaere/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
Next
-----------------------
og så i stedet øverst oppe under  "Dim UPLOAD_PATH" skriver
Response.Write(UPLOAD_PATH&"\"&Request.Querystring("sletFil"))
Avatar billede busschou Praktikant
01. april 2005 - 12:15 #7
ok er ikke sikker på jeg er her hele dagen men ideen er at du får et kryds foran alle filnavnene.
Når det er på plads så indsætter du øverst i din kode følgende:
-----------------
if request.querystring("sletFil") <> "" then
  Set sletFSO = CreateObject("Scripting.FileSystemObject")
  sletFSO.DeleteFile(UPLOAD_PATH&"\"&Request.Querystring("sletFil"))
end if
-----------------
Det bør slette filen uden varsel
Det eneste jeg er i tvivl om det er om du skal bruge "\" eller "/" ...derfor jeg tænkte en udskrift var på sin plads :o)
Avatar billede kivig Nybegynder
01. april 2005 - 12:30 #8
Hej igen. sorry med ventetiden. "frokost" :) Jeg forsøger med dette. ummidelbart kan jeg ikke sætte
For Each g_oFile In g_oFolder.Files
  Response.Write "<tr><td><a href='uploadcirkulaere.asp?sletFil='"<%=g_oFile.Name%>">X</a></td><td><a href=""cirkulaere/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
Next
ind i koden.. der er vist en syntax fejl.

Jeg kan rode lidt med dine koder og evt. vende tilbage på mandag hvis det er ok med dig. Men mange tak for dit hurtige svar.
Avatar billede busschou Praktikant
01. april 2005 - 12:38 #9
tror jeg satte en ' forkert
----------------------
For Each g_oFile In g_oFolder.Files
  Response.Write "<tr><td><a href='uploadcirkulaere.asp?sletFil="<%=g_oFile.Name%>"'>X</a></td><td><a href=""cirkulaere/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
Next
Avatar billede busschou Praktikant
01. april 2005 - 12:39 #10
argh ok my bad :o)
sådan her
For Each g_oFile In g_oFolder.Files
  Response.Write "<tr><td><a href='uploadcirkulaere.asp?sletFil="&g_oFile.Name&"'>X</a></td><td><a href=""cirkulaere/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
Next
Avatar billede kivig Nybegynder
01. april 2005 - 12:44 #11
OK .. DET så bedre ud.. http://www.kooperationen.dk/uploadcirkulaere.asp

Nu har jeg tilgengæld mistet overblikket :)
Avatar billede kivig Nybegynder
01. april 2005 - 12:48 #12
jeg har oploaded en testfil "linkplacering" som jeg vil slette.. jeg får en fejlmeddelse:

Variable is undefined: 'sletFSO'

/uploadcirkulaere.asp, line 9

linie 9 og 10. :

Set sletFSO = CreateObject("Scripting.FileSystemObject")
  sletFSO.DeleteFile(UPLOAD_PATH&"\"&Request.Querystring("sletFil"))
Avatar billede busschou Praktikant
01. april 2005 - 12:48 #13
ok rolig det kommer det kommer :o)
Det er jo rent tabel jonglering ;o)
Det skyldes jo at du ovenover de tre linjer og nedenunder har linjen
Response.Write "<tr><td><hr></td></tr>"
den skal også rettes til
Response.Write "<tr><td><hr></td><td><hr></td></tr>"
prøv det i første omgang for layoutes skyld :o)
Avatar billede busschou Praktikant
01. april 2005 - 12:50 #14
oven over de to linjer prøv at sætte følgende:
Dim sletSFO
Avatar billede busschou Praktikant
01. april 2005 - 12:52 #15
måske var den rettelse 12:48:56 dum...for jeg kan godt se at så skal formen også rykkes
Måske det var bedre at sætte "x´et" direkte ind foran linket fremfor i en celle for sig
altså følgende :
For Each g_oFile In g_oFolder.Files
  Response.Write "<tr><td><a href='uploadcirkulaere.asp?sletFil="&g_oFile.Name&"'>X</a>&nbsp;&nbsp;<a href=""cirkulaere/" & g_oFile.Name & """>" & g_oFile.name & "</a></td></tr>"
Next
Avatar billede kivig Nybegynder
01. april 2005 - 12:54 #16
min linie 5 til 11 ser sådan ud.

Dim UPLOAD_PATH
        UPLOAD_PATH    = Server.MapPath("cirkulaere")
Response.Write(UPLOAD_PATH&"\"&Request.Querystring("sletFil"))
if request.querystring("sletFil") <> "" then
  Set sletFSO = CreateObject("Scripting.FileSystemObject")
  sletFSO.DeleteFile(UPLOAD_PATH&"\"&Request.Querystring("sletFil"))
end if

hvor skal jeg indsætte: Response.Write "<tr><td><hr></td><td><hr></td></tr>" ?
Avatar billede kivig Nybegynder
01. april 2005 - 12:56 #17
ok rettelse 12:52 er lavet og det ser bedre ud :)
Avatar billede busschou Praktikant
01. april 2005 - 12:59 #18
Dim UPLOAD_PATH
        UPLOAD_PATH    = Server.MapPath("cirkulaere")
Response.Write(UPLOAD_PATH&"\"&Request.Querystring("sletFil"))
if request.querystring("sletFil") <> "" then
  Dim sletFSO
  Set sletFSO = CreateObject("Scripting.FileSystemObject")
  sletFSO.DeleteFile(UPLOAD_PATH&"\"&Request.Querystring("sletFil"))
end if
Avatar billede kivig Nybegynder
01. april 2005 - 13:05 #19
SÅDAN !!.. :D

testfilen er slettet. så kan jeg altid ændre "X" til "slet fil" ..

Mange 1000 tak for hjælpen. Giv et svar og dine velfortjente points er dine.
Avatar billede busschou Praktikant
01. april 2005 - 13:06 #20
oki kanon...dejligt når det virker :o)
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