The above SQL might work, but only if the DBMS supports subqueries in DELETE queries, and it will only delete one row at a time, which is probably not so great because you have 3 copies. I'd be wanting to delete two of them so that only one is left.
You obviously want to reference the row(s) that you want to delete by the ID. It's easy, if a little slower, to do two queries - one to find the record(s) you want to delete, and a second query to do the deletion. How about something like this, which would remove all duplicates:
1. find latest duplicate
SELECT MAX(ID) AS SaveID, User, Filename, Date, Received
FROM uploaded
GROUP BY User, Filename, Date, Received
HAVING COUNT(ID) > 1
2. remove prior duplicates
foreach ($row) {
...
// make row values safe for insertion
...
DELETE FROM uploaded WHERE ID != {$row['SaveID']} AND User = {$row['User']} AND ... // do equality check for all columns
...
}