it-swarm.com.de

Zulassen, dass CSV-Dateien hochgeladen werden

Ich versuche, CSV-Dateien in einer Dashboard-Menüseite wie dieser zuzulassen.

<form method="post" enctype="multipart/form-data">
    <input type="file" name="csv_file" id="csv_file"  multiple="false" accept=".csv" />
    <input type="submit" value="Upload" />
</form>


require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );

$attachment_id = media_handle_upload ( 'csv_file', 0, array(), array(
    'test_form' => false,
    'mimes'     => array(
        'csv'   => 'text/csv',
    ),
) );

Wenn ich eine CSV-Datei in das Formular hochlade, wird folgende Fehlermeldung angezeigt ...

Sorry, this file type is not permitted for security reasons.

Kann jemand erkennen, was ich falsch mache? Ich hatte angenommen, ich hätte den CSV-Mime-Typ im obigen Code zugelassen.

4
fightstarr20

Es gibt einen Bug in WordPress 4.7-4.7.3, der mit der Validierung von MIME-Typen zusammenhängt, sodass der von Dave Romsey bereitgestellte Code nicht funktioniert.

Es gibt ein Plugin im Repo , das MIME-Prüfungen umgeht, aber die Prüfungen für alle Benutzer und alle Erweiterungen deaktiviert. Ich denke, ein besserer Weg wäre, eine neue Funktion für Administratoren hinzuzufügen, mit der sie CSV-Erweiterungen hochladen können.

//* Register activation and deactivation hooks
register_activation_hook( __FILE__ , 'wpse_258192_activation' );
register_deactivation_hook( __FILE__ , 'wpse_258192_deactivation' );

//* Add upload_csv capability to administrator role
function wpse_258192_activation() {
  $admin = get_role( 'administrator' );
  $admin->add_cap( 'upload_csv' );
}

//* Remove upload_csv capability from administrator role
function wpse_258192_deactivation() {
  $admin = get_role( 'administrator' );
  $admin->remove_cap( 'upload_csv' );
}

//* Add filter to check filetype and extension
add_filter( 'wp_check_filetype_and_ext', 'wpse_258192_check_filetype_and_ext', 10, 4 );

//* If the current user can upload_csv and the file extension is csv, override arguments - edit - "$pathinfo" changed to "pathinfo"
function wpse_258192_check_filetype_and_ext( $args, $file, $filename, $mimes ) {
  if( current_user_can( 'upload_csv' ) && 'csv' === pathinfo( $filename )[ 'extension' ] ){
    $args = array(
      'ext'             => 'csv',
      'type'            => 'text/csv',
      'proper_filename' => $filename,
    );
  }
  return $args;
}
5
Nathan Johnson

Standardmäßig blockiert WordPress das Hochladen von .csv-Dateien. Mit dem mime_types-Filter können Sie .csv-Dateien oder andere hochzuladende Dateien hinzufügen:

add_filter( 'mime_types', 'wpse_mime_types' );
function wpse_mime_types( $existing_mimes ) {
    // Add csv to the list of allowed mime types
    $existing_mimes['csv'] = 'text/csv';

    return $existing_mimes;
}
3
Dave Romsey