sendResponseFile function
armv7a访问4g以上大文件会出错
Implementation
void sendResponseFile(HttpRequest request, File? file,
{String? mimeType}) async {
if (file == null) {
request.response.statusCode = 404;
request.response.write('File not exist!');
request.response.close();
return;
}
if (mimeType == null) {
mimeType = lookupMimeType(file.path);
mimeType ??= "*/*";
}
log('sendResponseFile mimeType:$mimeType');
int length = await file.length();
String? range = request.headers.value("range");
if (range != null) {
log('sendResponseFile range:$range');
request.response.statusCode = 206;
List<String> parts = range.split("=");
parts = parts[1].split("-");
int start = 0;
if (parts[0].isNotEmpty) {
start = int.parse(parts[0]);
}
int end = length - 1;
if (parts.length >= 2 && parts[1].isNotEmpty) {
end = int.parse(parts[1]);
}
int byteLength = end - start + 1;
log('range:$range start:$start '
'end:$end '
'byteLength: $byteLength');
initResponseHeaders(request, mimeType, byteLength);
request.response.headers
.add(HttpHeaders.contentRangeHeader, 'bytes $start-$end/$length');
await request.response.addStream(file.openRead(start, end + 1));
} else {
initResponseHeaders(request, mimeType, length);
await request.response.addStream(file.openRead());
}
request.response.close();
}