mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Serve assets with correct content-type header value (#94357)
This commit is contained in:
parent
c1872c3251
commit
2a4e573dcd
@ -455,14 +455,11 @@ class WebAssetServer implements AssetReader {
|
||||
// Attempt to determine the file's mime type. if this is not provided some
|
||||
// browsers will refuse to render images/show video etc. If the tool
|
||||
// cannot determine a mime type, fall back to application/octet-stream.
|
||||
String mimeType;
|
||||
if (length >= 12) {
|
||||
mimeType = mime.lookupMimeType(
|
||||
final String mimeType = mime.lookupMimeType(
|
||||
file.path,
|
||||
headerBytes: await file.openRead(0, 12).first,
|
||||
);
|
||||
}
|
||||
mimeType ??= _kDefaultMimeType;
|
||||
headerBytes: await file.openRead(0, mime.defaultMagicNumbersMaxLength).first,
|
||||
) ?? _kDefaultMimeType;
|
||||
|
||||
headers[HttpHeaders.contentLengthHeader] = length.toString();
|
||||
headers[HttpHeaders.contentTypeHeader] = mimeType;
|
||||
headers[HttpHeaders.etagHeader] = etag;
|
||||
|
||||
@ -539,7 +539,21 @@ void main() {
|
||||
expect((await response.read().toList()).first, source.readAsBytesSync());
|
||||
}));
|
||||
|
||||
test('serves asset files files from in filesystem with unknown mime type and length > 12', () => testbed.run(() async {
|
||||
test('serves asset files from in filesystem with known mime type and empty content', () => testbed.run(() async {
|
||||
final File source = globals.fs.file(globals.fs.path.join('web', 'foo.js'))
|
||||
..createSync(recursive: true);
|
||||
|
||||
final Response response = await webAssetServer
|
||||
.handleRequest(Request('GET', Uri.parse('http://foobar/foo.js')));
|
||||
|
||||
expect(response.headers, allOf(<Matcher>[
|
||||
containsPair(HttpHeaders.contentLengthHeader, '0'),
|
||||
containsPair(HttpHeaders.contentTypeHeader, 'application/javascript'),
|
||||
]));
|
||||
expect((await response.read().toList()).first, source.readAsBytesSync());
|
||||
}));
|
||||
|
||||
test('serves asset files files from in filesystem with unknown mime type', () => testbed.run(() async {
|
||||
final File source = globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'foo'))
|
||||
..createSync(recursive: true)
|
||||
..writeAsBytesSync(List<int>.filled(100, 0));
|
||||
@ -554,21 +568,6 @@ void main() {
|
||||
expect((await response.read().toList()).first, source.readAsBytesSync());
|
||||
}));
|
||||
|
||||
test('serves asset files files from in filesystem with unknown mime type and length < 12', () => testbed.run(() async {
|
||||
final File source = globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'foo'))
|
||||
..createSync(recursive: true)
|
||||
..writeAsBytesSync(<int>[1, 2, 3]);
|
||||
|
||||
final Response response = await webAssetServer
|
||||
.handleRequest(Request('GET', Uri.parse('http://foobar/assets/foo')));
|
||||
|
||||
expect(response.headers, allOf(<Matcher>[
|
||||
containsPair(HttpHeaders.contentLengthHeader, '3'),
|
||||
containsPair(HttpHeaders.contentTypeHeader, 'application/octet-stream'),
|
||||
]));
|
||||
expect((await response.read().toList()).first, source.readAsBytesSync());
|
||||
}));
|
||||
|
||||
test('serves valid etag header for asset files with non-ascii characters', () => testbed.run(() async {
|
||||
globals.fs.file(globals.fs.path.join('build', 'flutter_assets', 'fooπ'))
|
||||
..createSync(recursive: true)
|
||||
@ -594,7 +593,7 @@ void main() {
|
||||
|
||||
expect(response.headers, allOf(<Matcher>[
|
||||
containsPair(HttpHeaders.contentLengthHeader, '3'),
|
||||
containsPair(HttpHeaders.contentTypeHeader, 'application/octet-stream'),
|
||||
containsPair(HttpHeaders.contentTypeHeader, 'text/x-dart'),
|
||||
]));
|
||||
expect((await response.read().toList()).first, source.readAsBytesSync());
|
||||
}));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user