staticFiles method
Serves requests for static files at path
from directory
stripPrefix
parameter determines if the matched part of the path shall be
discarded while locating the target file.
When stripPrefix
is true, the behaviour is similar to 'alias' in Nginx.
With path
'/static/*', the target file will be located inside directory
in the following way:
/static/html/index.html -> html/index.html
When stripPrefix
is false, the behavior is similar to 'root' in Nginx.
With path
'/static/*', the target file will be located inside directory
in the following way:
/static/html/index.html -> static/html/index.html
Example: final server = Jaguar(); server.staticFiles('/static/*', 'static'); await server.serve();
Implementation
Route staticFiles(String path, directory,
{Map<String, String> pathRegEx,
int statusCode = 200,
String mimeType,
String charset = kDefaultCharset,
ResponseProcessor responseProcessor,
bool stripPrefix = true,
Future<Response> directoryLister(Directory directory)}) {
if (directory is String) directory = Directory(directory);
final Directory dir = directory;
if (!dir.existsSync())
throw Exception('Directory ${dir.path} does not exist!');
Route route;
int skipCount;
route = this.get(path, (ctx) async {
Iterable<String> segs = ctx.pathSegments;
if (stripPrefix) segs = segs.skip(skipCount);
String path = p.join(dir.path, p.joinAll(segs));
var file = File(path);
if (!await file.exists()) {
final fileDir = Directory(path);
if (!await fileDir.exists()) return Response(null, statusCode: 404);
path = p.join(path, 'index.html');
file = File(path);
if (!await file.exists()) {
if (directoryLister != null) return directoryLister(fileDir);
return Response(null, statusCode: 404);
}
}
return StreamResponse(file.openRead(),
mimeType: MimeTypes.ofFile(file));
},
pathRegEx: pathRegEx,
statusCode: statusCode,
mimeType: mimeType,
charset: charset,
responseProcessor: responseProcessor);
if (stripPrefix) {
if (route.pathSegments.isNotEmpty)
skipCount = route.pathSegments.length - 1;
}
return route;
}