Upload file - Eliminare un file

leftist73

Utente Attivo
18 Ott 2006
73
0
0
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

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 %>
 
Per la precisione, la cancellazione di un file col File System avviene cosi:

HTML:
<%
	Dim fso
	Set fso = Server.CreateObject("Scripting.FileSystemObject")
	fso.DeleteFile(Server.MapPath("file_da_eliminare.jpg"))
	Set fso = Nothing
%>

Ciao ;)
 
Per la precisione, la cancellazione di un file col File System avviene cosi:

HTML:
<%
	Dim fso
	Set fso = Server.CreateObject("Scripting.FileSystemObject")
	fso.DeleteFile(Server.MapPath("file_da_eliminare.jpg"))
	Set fso = Nothing
%>

Ciao ;)
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%">&nbsp;</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 :dipser::dipser:
 
No fuso :crying:

Finalmente ho trovato una soluzione, ovvero con lo script in basso situato in una pagina chiamata cancella.asp elimino i record (non anche i file caricati - meglio di nulla) ma ora non capisco perchè la pagina mi posta "impossibile visualizzare la pagina"

<%
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")) %>
 
Soluzione trovata a metà, ma è già qualcosa :elvis:

Riesco a cancellare il record dal db ma non il file nella cartella public (Aruba).
Posto lo script se potete dirmi dove sbaglio vi faccio una statua :)

<%


' //// 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/"))
%>

Grazie 1000
 
Sbagli qui secondo me:

fs.DeleteFile(server.mappath("/vetromile.it/public/"))

Non specificare il dominio e magari (non ci metto la mano sul fuoco) usa il back slash, quindi:

fs.DeleteFile(server.mappath("public\"))

In secondo luogo, non passi alcun file da cancellare. Non so cosa devi cancellare ma vedo che recuper un ID come querystring.

Ad esempio, quindi:

fs.DeleteFile(server.mappath("public\" & id & ".jpg"))

nel caso quindi in tu voglia cancellare, ad esempio, 5.jpg.

Che devi cancellare? :)

Poi setta su Nothing la variabile fs.

Fammi sapere!
 
Sbagli qui secondo me:

fs.DeleteFile(server.mappath("/vetromile.it/public/"))

Non specificare il dominio e magari (non ci metto la mano sul fuoco) usa il back slash, quindi:

fs.DeleteFile(server.mappath("public\"))

In secondo luogo, non passi alcun file da cancellare. Non so cosa devi cancellare ma vedo che recuper un ID come querystring.

Ad esempio, quindi:

fs.DeleteFile(server.mappath("public\" & id & ".jpg"))

nel caso quindi in tu voglia cancellare, ad esempio, 5.jpg.

Che devi cancellare? :)

Poi setta su Nothing la variabile fs.

Fammi sapere!

Ciao Lukeonweb,
sulla prima parte ti seguo,
e sulla seconda parte che mi sono perso.

Quello che vorrei riuscire a fare e comprendere e come cancellare:
Id = 5
nome_file = ciao.txt

Querystring cancello l'ID 5 cosi non lo visualizzo nell'elenco dei file caricati.

Io vorrei con un unica operazione cancellare entrambi: ID 5 e ciao.txt (che risiede nella cartella public).

Grazie 1000
 
Se in nome_file hai il nome del file da cancellare allora fai cosi:

fs.DeleteFile(server.mappath("public\" & nome_file))

Fammi sapere ;)

:dipser: Nulla.

Impossibile visualizzare la pagina.
Ma il record l'ho elimina sempre il file no.

Ora è per principio mannaggia.
PS: ovviamente ho i permessi sulla cartella public.
 
Mi scrivi, per favore, la URL assoluta dal tuo server del file da cancellare?

Anche se stai provando su localhost.

E' una scemata, non può funzionare. Ti trovi: indicami anche l'errore esatto che ti da.
 
Mi scrivi, per favore, la URL assoluta dal tuo server del file da cancellare?

Anche se stai provando su localhost.

E' una scemata, non può funzionare. Ti trovi: indicami anche l'errore esatto che ti da.

Ciao Luke,
grazie 1000, onestamente stavo per rinunciarci, francamente mi trovo in un vicolo cieco.

Allora, non sono in localhost ma utilizzo la cartella public di Aruba, nella quale ho tutti i permessi di scrittura (almeno cosi credo), quindi \public

Ho anche modificato il file che dovrebbe effettuare l'eliminazione del record e del file, ma ora mi dice file not found (errore assurdo, il file è li!!!).

Preciso che il db si popola perfettamente, l'id corisponde al file che anch'esso viene inserito nel record, con il nome corretto.

Ti posto lo script modificato:
<%
........... connessione al db
%>

<%
' Recupero l id
id=Request.Querystring("id")
' Elimino il file corrispondente all id
Dim Rs
Dim Sql
Sql = "SELECT nome_file FROM UPLOAD WHERE id="&id
Set Rs = Conn.Execute(Sql)
If Rs.Eof Then
Response.Write "Nessun file associato per id prodotto <strong>" & Request.QueryString("id") & "</strong>"
Else
Dim objFSO
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
'Il file viene cancellato
objFSO.DeleteFile(Server.MapPath("public/"&(rs("nome_file"))))

Set objFSO = Nothing
%>
<%
' Elimino il record
SQL="DELETE FROM UPLOAD WHERE id="&id
Conn.Execute(SQL)
conn.close
Set conn = NOTHING

End If
%>

Mi trovo difronte ad un muro!

Ancora grazie 1000
 
Ci vedo qualche parentesi in più... prova cosi:

objFSO.DeleteFile(Server.MapPath("public/" & rs("nome_file")))

Logicamente il tuo codice mi sembra corretto, anche se IIS in genere funziona meglio dell'occhio umano in queste cose :)

Mi dici esattamente che errore ti da? oppure non ti da errore e semplicemente non cancella il file? Se è cosi prova a "giocare" con gli / all'interno del MapPath, ad esempio:

objFSO.DeleteFile(Server.MapPath("public\" & rs("nome_file")))

oppure passagli il percorso locale assoluto:

objFSO.DeleteFile("C:\Inetpub\wwwroot\tuosito\public\" & rs("nome_file"))

Se non va prova a stampare a video il path:

Response.Write "C:\Inetpub\wwwroot\tuosito\public\" & rs("nome_file")

copialo, incollalo nel browser e vedi se il file, a quell'indirizzo esiste o no.

Anche su Aruba dovresti poter conoscere il percorso locale, fisico, del file.

Fammi sapere!
 
Fammi sapere!

L'errore che mi dà è assurdo: File not Found!!
La riga è objFSO.DeleteFile(Server.MapPath("public\" & rs("nome_file")))

Dico assurdo perchè il file è li, lo vedo anche nel record del db, come può non trovarmelo :confused::crying:

Luke posso chiederti un immenso piacere, posso inviarti le pagine??
Io veramente non capisco, sicuramente commetto un errore, ma proprio non capisco dove e quale.

Grazie
 
Ho provato sul mio localhost cosi e mi ha cancellato il file "acampora.php" nella cartella "public" che ho creato nella root:

objFSO.DeleteFile(Server.MapPath("\public\"&(rs("nome_file"))))

In sostanza ci siamo scordati dello \ avanti :)

Se non dovesse andare prova con / (dipende dalla configurazione dei path su IIS e Aruba non so cosa fa).

Mi fai sapere per favore, altrimenti stanotte non dormo? :)
 
Ho provato sul mio localhost cosi e mi ha cancellato il file "acampora.php" nella cartella "public" che ho creato nella root:

objFSO.DeleteFile(Server.MapPath("\public\"&(rs("nome_file"))))

In sostanza ci siamo scordati dello \ avanti :)

Se non dovesse andare prova con / (dipende dalla configurazione dei path su IIS e Aruba non so cosa fa).

Mi fai sapere per favore, altrimenti stanotte non dormo? :)
Funzionaaaaaaaaa
Pazzesco per uno \ !!!!! :hammer: :fuck:

Non ho parole Luke, erano due notti che non mi davo pace.
Sei un grande!

Grazie, Grazie e ancora Grazie.

Ps: Desidero ringraziare anche Pole, che mi ha dato il primo spunto (stringa).
 

Discussioni simili