gpt4 book ai didi

dart - 如何在 Dart 中使用 HttpServer 提供文件

转载 作者:行者123 更新时间:2023-12-05 01:30:52 24 4
gpt4 key购买 nike

我的 Dart 应用具有以下标准结构:

/
pubspec.yaml
web/
main.css
main.dart
main.html
build.dart
server.dart

当我在服务器上收到 GET 请求时,我希望服务器以根用户身份使用 web 目录并将文件内容提供给客户端。

我该怎么做?

这是我到目前为止的进展:

import 'dart:io';

void main() {
HttpServer.bind('127.0.0.1', 80).then((HttpServer server) {
server.listen((request) {
print("got request");

switch (request.method) {
case 'GET':
// Do I need to send the file here? ...
// if not fount then send HttpStatus.NOT_FOUND;
break;

default:

}
});
});
}

最佳答案

这是我的代码在 Matt B 之后的最新版本的答案:

import 'dart:io';
import 'package:path/path.dart' as path;

String _basePath;

_sendNotFound(HttpResponse response) {
response.write('Not found');
response.statusCode = HttpStatus.NOT_FOUND;
response.close();
}


_handleGet(HttpRequest request) {
// PENDING: Do more security checks here?
final String stringPath = request.uri.path == '/' ? '/main.html' : request.uri.path;
final File file = new File(path.join(_basePath, stringPath));
file.exists().then((bool found) {
if (found) {
file.openRead().pipe(request.response).catchError((e) { });
} else {
_sendNotFound(request.response);
}
});
}


_handlePost(HttpRequest request) {

}


void main() {
_basePath = Platform.environment['HOME'];

HttpServer.bind('127.0.0.1', 80).then((HttpServer server) {
server.listen((request) {
switch (request.method) {
case 'GET':
_handleGet(request);
break;

case 'POST':
_handlePost(request);
break;

default:
request.response.statusCode = HttpStatus.METHOD_NOT_ALLOWED;
request.response.close();
}
});
});
}

关于dart - 如何在 Dart 中使用 HttpServer 提供文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com