• User Attivo

    Upload file - Eliminare un file

    Ciao a tutti,
    dopo circa un milione di ricerche on-line per trovare e/o studiare uno script Asp con Db in MySql, ho ceduto per un semplice upload connesso ad un Db Access.
    Lo script funziona, con dei limiti, ma soddisfa in minima parte la mia esigenza.
    Ora mi sono trovato dinanzi ad un muro, non riesco a capire come fare ad eliminare un file caricato.

    Stò impazzendo ❌x:x
    Preciso che sono un pò scarsino in materia!!

    Posto lo script, magari sapete darmi un saggio consiglio.

    Grazie 1000

    <form enctype="multipart/form-data" method="post" action="upload.asp" name="form">
    <table width="80%" cellpadding="3" cellspacing="3" border="1" bordercolor="#C0C0C0">
    <tr>
    <td align="center"><b>NOME:</b></td>
    <td align="center"><input name="titolo_file" type="text" id="titolo_file" size="30" /></td>
    <td align="center"><b>ALLEGATO:</b></td>
    <td align="center"><input type="file" name="nome_file" size="20" /></td>
    <td align="center"><input type="submit" value="Carica File" /></td>
    </tr>
    </table>

                    </form>
     <%
    

    ' //// connessione al DB
    Set Conn=Server.CreateObject("ADODB.Connection")
    Conn.Open "PROVIDER=MSDASQL;" & _
    "DRIVER={Microsoft Access Driver (*.mdb)}; " & _
    "DBQ=" & server.mappath("/mdb-database/database.mdb")
    ' //// seleziono la tabella per stampare a video i link ai file caricati e ordino i risultati ID decrescente
    Sql = "Select * from UPLOAD order by ID Desc ;"
    Set Rs = Conn.Execute(Sql)
    ' //// se la tabella è vuota stampo a video un messaggio e chiudo il records set
    If Rs.Eof OR Rs.Bof Then
    Response.Write("<center><font color='red'>Non ci sono file caricati sul server.</font></center>")
    Rs.Close
    Set Rs = Nothing
    ' //// se la tabella non è vuota
    Else
    %><br>
    <table cellspacing="3" cellpadding="3" width="80%" border="1" bordercolor="#C0C0C0">
    <tr>
    <td bgcolor="#C0C0C0"><b>DATA</b></td>
    <td bgcolor="#C0C0C0"><b>FILE</b></td>
    </tr>
    <%
    ' //// effettuo un ciclo sulla tabella per stampare a video tutti i records
    While Not Rs.Eof
    %>
    <tr>
    <td><%=Rs.Fields("data")%></td>
    <td><a target="_blank" href="/public/<%=Rs.Fields("nome_file")%>"><%=Rs.Fields("titolo_file")%></a></td>
    <%
    ' //// vado avanti con il ciclo
    Rs.MoveNext
    Wend
    ' //// chiudo il records set e libero risorse
    Rs.Close
    Set Rs = Nothing
    %>
    </tr>
    </table>
    <% End If %>


  • Super User

    Per cancellare il file prova con
    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(pathdelfile) %>

    Ottieniil path del file con Server.MapPath


  • User Attivo

    @cali1981 said:

    Per cancellare il file prova con
    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(pathdelfile) %>

    Ottieniil path del file con Server.MapPath

    Azz, allora sono veramente scarso!!
    Scusami ma non ho capito il tuo suggerimento.
    :crying::crying::crying:


  • Super User

    Devi usare il codice sopra, in questo modo:

    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(server.mappath("pathdelfile")) %>


  • User Attivo

    @cali1981 said:

    Devi usare il codice sopra, in questo modo:

    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(server.mappath("pathdelfile")) %>

    No sono ottuso o forse fuso, scusatemi.

    Creo la teballa che mi visualizza ciò che ho creato:
    <%
    ' //// connessione al DB
    Set Conn=Server.CreateObject("ADODB.Connection")
    Conn.Open "PROVIDER=MSDASQL;" & _
    "DRIVER={Microsoft Access Driver (*.mdb)}; " & _
    "DBQ=" & server.mappath("/mdb-database/database.mdb")
    ' //// seleziono la tabella per stampare a video i link ai file caricati e ordino i risultati ID decrescente
    Sql = "Select * from UPLOAD order by ID Desc ;"
    Set Rs = Conn.Execute(Sql)
    ' //// se la tabella è vuota stampo a video un messaggio e chiudo il records set
    If Rs.Eof OR Rs.Bof Then
    Response.Write("<center><font color='red'>Non ci sono file caricati sul server.</font></center>")
    Rs.Close
    Set Rs = Nothing
    ' //// se la tabella non è vuota
    Else
    %>
    <div align="center">
    <table cellspacing="3" cellpadding="3" width="80%" border="1" bordercolor="#C0C0C0">
    <tr>
    <td bgcolor="#C0C0C0" width="30%"><b>DATA</b></td>
    <td bgcolor="#C0C0C0" width="30%"> </td>
    <td bgcolor="#C0C0C0" width="30%"><b>FILE</b></td>
    </tr>
    <%
    ' //// effettuo un ciclo sulla tabella per stampare a video tutti i records
    While Not Rs.Eof
    %>
    <tr>
    <td width="30%"><%=Rs.Fields("data")%></td>
    <td width="30%">

            </td>
    

    <td width="30%">
    <a target="_blank" href="/public/<%=Rs.Fields("nome_file")%>"><%=Rs.Fields("titolo_file")%></a></td>
    <%
    ' //// vado avanti con il ciclo
    Rs.MoveNext
    Wend
    ' //// chiudo il records set e libero risorse
    Rs.Close
    Set Rs = Nothing
    %>
    </tr>
    </table>
    </div>
    <% End If %>

    Se io inserisco lo script:
    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(server.mappath("pathdelfile")) %>

    Mi dà errore come se il file non fosse trovato: error '800a0035'

    Ti e vi chiedo ancora scusa ma sono davvero stanchissimo.
    Grazie


  • Super User

    Questo cancellerebbe già il file. Immagino che tu voglia mettere in quella tabella un link che faccia cancellare il file no? Quindi dovrai mettere un link verso una pagina, a cui passi un id, quindi ad esempio cancella_file.asp?id=1234, e in quella pagina prendi il valore di id, carichi il percorso del file da db, e se esiste lo cancelli con quello spezzono di codice che ho scritto sopra.


  • User Attivo

    error....e poi che ti scrive?? lo scrivi l'errore completo??


  • User Attivo

    @cali1981 said:

    Questo cancellerebbe già il file. Immagino che tu voglia mettere in quella tabella un link che faccia cancellare il file no? Quindi dovrai mettere un link verso una pagina, a cui passi un id, quindi ad esempio cancella_file.asp?id=1234, e in quella pagina prendi il valore di id, carichi il percorso del file da db, e se esiste lo cancelli con quello spezzono di codice che ho scritto sopra.
    Allora sono ottuso 😮 😞

    Nella pagina dove visualizzo i file caricati inserisco il link con la banale immagine di elimina:
    <a href="cancella.asp?id=<%=rs.fields("id")%>"><img src="immagini/elimina.gif" width="16" height="16" border="0" /></a>

    Nalla pagina cancella.asp:
    <%
    ' //// connessione al DB
    Set Conn=Server.CreateObject("ADODB.Connection")
    Conn.Open "PROVIDER=MSDASQL;" & _
    "DRIVER={Microsoft Access Driver (*.mdb)}; " & _
    "DBQ=" & server.mappath("/mdb-database/database.mdb")
    ' //// seleziono la tabella per stampare a video i link ai file caricati e ordino i risultati ID decrescente
    Sql = "Select * from UPLOAD order by ID Desc ;"
    Set Rs = Conn.Execute(Sql)
    %>
    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(server.mappath("pathdelfile")) %>

    Risultato: impossibile visualizzare la pagina: errore interno nel server.

    Per La Maglia Rosanero: File not found


  • User Attivo

    [quote=leftist1973;481674]

    Cosi mi funziona, ovvero cancella i record (non anche i file caricati - meglio di nulla) ma ora non capisco perchè la pagina cancella.asp che contiene lo script indicato in basso mi posta "impossibile visualizzare la pagina"
    :bho:

    <%
    id = request.querystring("id")
    ' //// connessione al DB
    Set Conn=Server.CreateObject("ADODB.Connection")
    Conn.Open "PROVIDER=MSDASQL;" & _
    "DRIVER={Microsoft Access Driver (*.mdb)}; " & _
    "DBQ=" & server.mappath("/mdb-database/database.mdb")
    ' //// seleziono la tabella per stampare a video i link ai file caricati e ordino i risultati ID decrescente
    Sql = "DELETE FROM UPLOAD WHERE id="&id&""
    Set Rs = Conn.Execute(Sql)
    %>
    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(server.mappath("pathdelfile")) %>


  • Super User

    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(server.mappath("pathdelfile")) %>

    ovviamente pathdelfile non va bene qui dentro, devi metterci il path del file, non la scritta path del file


  • User Attivo

    @cali1981 said:

    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(server.mappath("pathdelfile")) %>

    ovviamente pathdelfile non va bene qui dentro, devi metterci il path del file, non la scritta path del file

    Almeno questo si, ovviamente ho copiato e incollatoprima di aver fatto tutte le modifiche:
    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(server.mappath("/mdb-database/database.mdb"))
    %>

    Funge tutto, tranne che la pagina risulta ancora con errore interno del server, non mi dà altri errori ne righe.


  • Super User

    Prova a vedere pezzo per pezzo caso da errore. All'inizio fatti visualizzare solo l'id poi vai avanti e vedi quando si ferma


  • User Attivo

    @cali1981 said:

    Prova a vedere pezzo per pezzo caso da errore. All'inizio fatti visualizzare solo l'id poi vai avanti e vedi quando si ferma

    Grazie Cali, sei stato davvero gentilissimo :quote:

    Ora funziona tutto, anche se non riesco ad eliminare il file salvato nella cartella pubilc (Aruba)

    posto lo script magari se ancora mi sopporti puoi darmi un ultimissimo consiglio.
    In caso contrario ancora grazie, ti sono debitore.
    <%

    ' //// connessione al DB
    Set Conn=Server.CreateObject("ADODB.Connection")
    Conn.Open "PROVIDER=MSDASQL;" & _
    "DRIVER={Microsoft Access Driver (*.mdb)}; " & _
    "DBQ=" & server.mappath("/mdb-database/database.mdb")
    %>
    <%
    id = request.querystring("id")

    ' //// seleziono la tabella per stampare a video i link ai file caricati e ordino i risultati ID decrescente
    Sql = "DELETE FROM UPLOAD WHERE id="&id&""
    Set Rs = Conn.Execute(Sql)
    conn.close

    progressivo=Trim(Request("progressivo"))
    Response.Write("Hai cancellato la Comunicazione Interna Dealer!" )
    %>

    <% set fs = CreateObject("Scripting.FileSystemObject")
    fs.DeleteFile(server.mappath("/vetromile.it/public/"))
    %>

    Ciaoooo
    :ciauz:


  • Super User

    Se il codice è esattamente questo, l'errore sta su fs.DeleteFile(server.mappath("/vetromile.it/public/")), perchè oltre alla directory ci devi mettere anche il nome del file che vuoi cancellare, che immagino prenderai da db.


  • User Attivo

    @cali1981 said:

    Se il codice è esattamente questo, l'errore sta su fs.DeleteFile(server.mappath("/vetromile.it/public/")), perchè oltre alla directory ci devi mettere anche il nome del file che vuoi cancellare, che immagino prenderai da db.

    Ciao Cali,
    sono riuscito a seguire tutti i tuoi consigli, ma questo non l'ho capito.

    Cioè non capisco come.
    Il campo nel db si chiama nome_file.

    Ho provato varie soluzioni ma il risultato è sempre lo stesso: il nulla :bho::bho:


  • Super User

    fs.DeleteFile(server.mappath("/vetromile.it/public/" & Rs.Fields("nome_file")))


  • User Attivo

    @cali1981 said:

    fs.DeleteFile(server.mappath("/vetromile.it/public/" & Rs.Fields("nome_file")))

    Ciao Cali, ancora grazie per la pasienza.

    Avevo già provato cosi, ma dà errore pagina (impossibile visualizzare la pagina) e comunque non cancella il file caricato, mentre l'ID si :(:(

    ❌x


  • Super User

    vedi se il file "/vetromile.it/public/" & Rs.Fields("nome_file") esiste sul serio


  • User Attivo

    @cali1981 said:

    vedi se il file "/vetromile.it/public/" & Rs.Fields("nome_file") esiste sul serio

    Esiste, ho provato anche cosi:
    fs.DeleteFile(server.mappath("/public/" & Rs.Fields("nome_file")))

    La pagina dove effettuo il caricamento ha due campi:

    1. titolo_file = dò un nome al file caricato
    2. nome_file = file da caricare

    Risultato:
    data - titolo_file - file

    :arrabbiato:


  • Super User

    Hai i diritti per cancellare il file? Sei su public quindi dovresti averli. Comunque io intendevo provare a vedere se il file esiste usando quel percorso, qualcosa del tipo

    if fs.FileExists (server.mappath("/public/" & Rs.Fields("nome_file"))) then Response.write("esiste")