sendResponseFile function

void sendResponseFile(
  1. HttpRequest request,
  2. File? file, {
  3. String? mimeType,
})

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();
}