71 lines
2.5 KiB
Markdown
71 lines
2.5 KiB
Markdown
|
|
[](https://github.com/dart-lang/tools/actions/workflows/mime.yml)
|
||
|
|
[](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".
|
||
|
|
```
|