# Block Duplicate Uploads

> Stops the same file from being uploaded twice by comparing a fingerprint of each new upload with files already in the Media Library, and tells the user where the existing copy is.

- Type: PHP
- Runs: Run everywhere
- Category: [Media](https://wpide.com/library/category/media/)
- Tags: uploads, duplicates, media-library
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/block-duplicate-uploads/

## Code

```php
add_filter( 'wp_handle_upload_prefilter', function ( $file ) {
    if ( ! empty( $file['error'] ) || empty( $file['tmp_name'] ) || ! is_readable( $file['tmp_name'] ) ) {
        return $file;
    }

    $existing = get_posts( array(
        'post_type'   => 'attachment',
        'post_status' => 'inherit',
        'fields'      => 'ids',
        'numberposts' => 1,
        'meta_key'    => '_wpide_file_hash',
        'meta_value'  => md5_file( $file['tmp_name'] ),
    ) );

    if ( $existing ) {
        $file['error'] = sprintf( 'This file is already in the Media Library as "%1$s" (ID %2$d).', get_post_field( 'post_title', $existing[0] ), $existing[0] );
    }

    return $file;
} );

add_action( 'add_attachment', function ( $attachment_id ) {
    $path = get_attached_file( $attachment_id );

    if ( $path && is_readable( $path ) ) {
        update_post_meta( $attachment_id, '_wpide_file_hash', md5_file( $path ) );
    }
} );
```

## Notes

Only files uploaded after the snippet is activated have a fingerprint, so older duplicates are not detected.

## How to use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find "Block Duplicate Uploads" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
