The following functions/methods have been removed:
file_get_mimetype()file_mimetype_mapping()file_default_mimetype_mapping()Drupal/Core/StreamWrapper/StreamWrapperInterface::getMimeType()
How to get a file's mimetype:
D7
$mimetype = file_get_mimetype('public://myimage.png');
// With a custom mapping by only checking extension
$mimetype = file_get_mimetype('public://myimage.png', $my_custom_mapping_array);
D8
$mimetype = \Drupal::service('file.mime_type.guesser')->guess('public://myimage.png');
Passing a custom mapping to the method is not supported in Drupal 8.
There are two options in Drupal 8 to get customized MIME type mapping:
1. Altering the mapping of extensions to MIME types
Drupal 8 provides a built-in MIME type guesser based on the file extension, that uses the 'file.mime_type.mapper' service to manage a map of the MIME types to the appropriate file extension. This service invokes hook_file_mimetype_mapping_alter() that can be used to alter these mappings, like in D7. However, while in D7 hook implementations were directly manipulating the map array, the D8 hook requires to use the addMapping method to add/override mappings of the passed-in MimeTypeMapper object:
D7
function MYMODULE_file_mimetype_mapping_alter(&$mapping) {
// Add new MIME type 'drupal/info'.
$mapping['mimetypes']['example_info'] = 'drupal/info';
// Add new extension '.info' and map it to the 'drupal/info' MIME type.
$mapping['extensions']['info'] = 'example_info';
// Override existing extension mapping for '.ogg' files.
$mapping['extensions']['ogg'] = 189;
}
D8
function MYMODULE_file_mimetype_mapping_alter(\Drupal\Core\File\MimeType\MimeTypeMapperInterface $mime_type_mapper) {
// Add new MIME type 'drupal/info', and map it to a new extension
// '.info.yml'.
$mime_type_mapper->addMapping('drupal/info', 'info.yml');
// Override existing extension mapping for '.ogg' files.
$mime_type_mapper->addMapping('audio/ogg', 'ogg');
}
2. Adding a custom guesser:
If you want a completely custom mapper see below on how to add your own guesser.
mymodule.services.yml:
services:
file.mime_type.guesser.my_custom:
class: Drupal\mymodule\File\MimeType\MyCustomMimeTypeGuesser
tags:
- { name: mime_type_guesser }The guesser itself should implement Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface
src/File/MimeType\MyCustomMimeTypeGuesser.php:
namespace Drupal\mymodule\File\MimeType;
use Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface;
class MyCustomMimeTypeGuesser implements MimeTypeGuesserInterface {
public function guess($path) {
// Do stuff
}
}