Permettere il caricamento di immagini WebP?

17 dic 2018, 23:38:37
Visualizzazioni: 17.9K
Voti: 14

Ho provato entrambi questi metodi, ma continuo a ricevere il messaggio di errore: "Spiacente, questo tipo di file non è permesso per motivi di sicurezza."

// aggiungi supporto per i tipi mime webp
function webp_upload_mimes( $existing_mimes ) {
    // aggiungi webp alla lista dei tipi mime
    $existing_mimes['webp'] = 'image/webp';

    // restituisci l'array alla funzione con il nostro tipo mime aggiunto
    return $existing_mimes;
}

add_filter( 'mime_types', 'webp_upload_mimes' );


function my_custom_upload_mimes($mimes = array()) {

   // aggiungi webp alla lista dei tipi mime
    $existing_mimes['webp'] = 'image/webp';

    return $mimes;
}

add_action('upload_mimes', 'my_custom_upload_mimes');

Qualche idea?

0
Tutte le risposte alla domanda 4
5
25

È necessario utilizzare il filtro wp_check_filetype_and_ext per impostare il tipo mime e l'estensione per i file webp, oltre a utilizzare il filtro upload_mimes per aggiungere il tipo mime alla lista dei mime caricabili.

/**
 * Imposta l'estensione e il tipo mime per i file .webp.
 *
 * @param array  $wp_check_filetype_and_ext Array di dati del file contenente le chiavi 'ext', 'type' e
 *                                          'proper_filename'.
 * @param string $file                      Percorso completo del file.
 * @param string $filename                  Nome del file (può differire da $file perché
 *                                          $file potrebbe essere in una cartella tmp).
 * @param array  $mimes                     Chiave è l'estensione del file con valore come tipo mime.
 */
add_filter( 'wp_check_filetype_and_ext', 'wpse_file_and_ext_webp', 10, 4 );
function wpse_file_and_ext_webp( $types, $file, $filename, $mimes ) {
    if ( false !== strpos( $filename, '.webp' ) ) {
        $types['ext'] = 'webp';
        $types['type'] = 'image/webp';
    }

    return $types;
}

/**
 * Aggiunge il tipo file webp ai mime consentiti
 * 
 * @see https://codex.wordpress.org/Plugin_API/Filter_Reference/upload_mimes
 * 
 * @param array $mimes Tipi mime con chiave come regex dell'estensione del file corrispondente
 *                     a quei tipi. 'swf' e 'exe' rimossi dalla lista completa. 'htm|html' anche
 *                     rimosso in base alle capacità dell'utente.
 *
 * @return array
 */
add_filter( 'upload_mimes', 'wpse_mime_types_webp' );
function wpse_mime_types_webp( $mimes ) {
    $mimes['webp'] = 'image/webp';

  return $mimes;
}

Ho testato questo codice su WP v5.0.1 e sono riuscito a caricare file webp dopo averlo aggiunto.

18 dic 2018 00:37:30
Commenti

Sì, ha funzionato :)

Best Dev Tutorials Best Dev Tutorials
18 dic 2018 00:55:03

Davvero strano. La funzione upload_mimes che avevo già stava funzionando bene, e poi un giorno, senza un motivo apparente, ha smesso di funzionare. Ho scoperto questo, ho aggiunto il tuo codice (nel mio caso era .svg il problema), e voilà - perfetto! Comunque, grazie per questo.

dgo dgo
14 apr 2020 14:59:51

Purtroppo non funziona per me. Continuo a ricevere "Questa immagine non può essere elaborata dal server web. Convertila in JPEG o PNG prima di caricarla." Uso WP 5.8.

William Beaumont William Beaumont
8 ago 2021 20:02:10

@WilliamBeaumont Penso che il problema che hai menzionato sia diverso da quello dell'OP. Questo commento (e la discussione) potrebbe aiutare a risolvere l'errore che hai notato: https://wordpress.org/support/topic/wordpress-5-8-still-rejects-webp-images/#post-14733877

Dave Romsey Dave Romsey
8 ago 2021 20:34:04

Funziona bene in WP 6 nel 2024 =)

frizzant frizzant
24 gen 2024 12:12:23
1

A volte i caricamenti sono limitati dal tuo hosting. Prova a definire la costante ALLOW_UNFILTERED_UPLOADS che consente il caricamento per ogni tipo di file:

define( 'ALLOW_UNFILTERED_UPLOADS', true );

Usa questo nel tuo file wp-config.php per un momento, a scopo di test. Poi ricarica il tuo file, e se ancora non funziona, è probabile che l'hosting abbia bloccato quel tipo di file dal caricamento. Assicurati di rimuovere la costante il prima possibile, quando hai finito di provare.

Inoltre, puoi usare la funzione get_allowed_mime_types() per verificare i mime type consentiti per il caricamento.

18 dic 2018 00:16:08
Commenti

Anche se funziona, potrebbe aprire vulnerabilità attraverso il sistema di upload. Fai attenzione.

Vincent Poirier Vincent Poirier
4 dic 2021 20:22:46
0

Sono riuscito a farlo funzionare creando il seguente plugin. (Basta aggiungere questo codice a un nuovo file nella directory /wp-content/plugins/ per creare il plugin. Assicurati di attivare il plugin dopo averlo creato.)

<?php
/**
 * Plugin Name: WPSE Consenti Upload Webp
 */

function webp_file_and_ext( $mime, $file, $filename, $mimes ) {

    $wp_filetype = wp_check_filetype( $filename, $mimes );
    if ( in_array( $wp_filetype['ext'], [ 'webp' ] ) ) {
        $mime['ext']  = true;
        $mime['type'] = true;
    }

    return $mime;
}
add_filter( 'wp_check_filetype_and_ext', 'webp_file_and_ext', 10, 4 );

function add_webp_mime_type( $mimes ) {
    $mimes['webp'] = 'image/webp';
    return $mimes;
}
add_filter( 'upload_mimes', 'add_webp_mime_type' );
8 ott 2019 10:07:23
0

Ho creato un esempio di come potrebbe essere implementato in una classe:

<?php

class Example {
    public array $mime_types = [
        'woff'  => 'font/woff|application/font-woff|application/x-font-woff|application/x-woff|application/octet-stream',
        'woff2' => 'font/woff2|application/font-woff2|application/x-font-woff2|application/x-woff2|application/octet-stream',
        'ttf'   => 'font/ttf|application/font-ttf|application/x-font-ttf|application/x-ttf|application/octet-stream',
        'otf'   => 'font/otf|application/font-otf|application/x-font-otf|application/x-otf|application/octet-stream',
        'eot'   => 'application/vnd.ms-fontobject'
    ];

    private function __construct() {
        /** altre tue azioni + filtri */

        add_filter( 'upload_mimes', [ $this, 'custom_upload_mimes' ] );
        add_filter( 'wp_check_filetype_and_ext', [ $this, 'file_and_ext_webp' ], 10, 4 );
    }

    /**
     * @param $existing_mimes array
     *
     * @return array
     */
    function custom_upload_mimes( $existing_mimes = [] ): array {
        foreach ( $this->mime_types as $ext => $value ) {
            $existing_mimes[ $ext ] = $value;
        }

        return $existing_mimes;
    }

    /**
     * Imposta l'estensione e il tipo mime per i file predefiniti.
     *
     * @return mixed
     */
    function file_and_ext_webp( $types, $file, $filename, $mimes ) {

        foreach ( $this->mime_types as $ext => $value ) {
            if ( false !== strpos( $filename, ".$ext" ) ) {
                $types['ext']  = $ext;
                $types['type'] = $value;
            }
        }

        return $types;
    }

}

https://gist.github.com/frizzant/7ad08ad6bfc0dbac08dabeed73e2d964

24 gen 2024 12:21:11