| [](https://github.com/dart-lang/tools/actions/workflows/mime.yaml) | |
| [](https://pub.dev/packages/mime) | |
| [](https://pub.dev/packages/mime/publisher) | |
| Package for working with MIME type definitions and for processing streams of | |
| MIME multipart media types. | |
| ## Determining the MIME type for a file | |
| The `MimeTypeResolver` class can be used to determine the MIME type of | |
| a file. It supports both using the extension of the file name and | |
| looking at magic bytes from the beginning of the file. | |
| There is a builtin instance of `MimeTypeResolver` accessible through | |
| the top level function `lookupMimeType`. This builtin instance has | |
| the most common file name extensions and magic bytes registered. | |
| ```dart | |
| import 'package:mime/mime.dart'; | |
| void main() { | |
| print(lookupMimeType('test.html')); | |
| // text/html | |
| print(lookupMimeType('test', headerBytes: [0xFF, 0xD8])); | |
| // image/jpeg | |
| print(lookupMimeType('test.html', headerBytes: [0xFF, 0xD8])); | |
| // image/jpeg | |
| } | |
| ``` | |
| You can build you own resolver by creating an instance of | |
| `MimeTypeResolver` and adding file name extensions and magic bytes | |
| using `addExtension` and `addMagicNumber`. | |
| ## Processing MIME multipart media types | |
| The class `MimeMultipartTransformer` is used to process a `Stream` of | |
| bytes encoded using a MIME multipart media types encoding. The | |
| transformer provides a new `Stream` of `MimeMultipart` objects each of | |
| which have the headers and the content of each part. The content of a | |
| part is provided as a stream of bytes. | |
| Below is an example showing how to process an HTTP request and print | |
| the length of the content of each part. | |
| ```dart | |
| // HTTP request with content type multipart/form-data. | |
| HttpRequest request = ...; | |
| // Determine the boundary form the content type header | |
| String boundary = request.headers.contentType.parameters['boundary']; | |
| // Process the body just calculating the length of each part. | |
| request | |
| .transform(new MimeMultipartTransformer(boundary)) | |
| .map((part) => part.fold(0, (p, d) => p + d)) | |
| .listen((length) => print('Part with length $length')); | |
| ``` | |
| ## Determining file extension by MIME type | |
| The top level function `extensionFromMime` can be used to determine the | |
| file extension of a given MIME type. | |
| ```dart | |
| print(extensionFromMime('text/html')); // Prints "html". | |
| print(extensionFromMime('image/jpeg')); // Prints "jpg". | |
| print(extensionFromMime('application/pdf')); // Prints "pdf". | |
| ``` |