添加前端支持
This commit is contained in:
@@ -18,7 +18,8 @@ Response jsonResponse(dynamic data) {
|
||||
);
|
||||
}
|
||||
|
||||
Router createRouter() {
|
||||
/// 创建 API v1 版本的路由
|
||||
Router createApiV1Router() {
|
||||
final router = Router()
|
||||
..get('/', _rootHandler)
|
||||
..get("/album", _listAlbumHandler)
|
||||
@@ -31,6 +32,16 @@ Router createRouter() {
|
||||
return router;
|
||||
}
|
||||
|
||||
/// 创建主路由器,将 API v1 挂载到 /api/v1 路径下
|
||||
Router createRouter() {
|
||||
final router = Router();
|
||||
|
||||
// 将 API v1 路由挂载到 /api/v1 路径下
|
||||
router.mount('/api/v1', createApiV1Router().call);
|
||||
|
||||
return router;
|
||||
}
|
||||
|
||||
Response _rootHandler(Request req) {
|
||||
return Response.ok('Hello, World!\n');
|
||||
}
|
||||
@@ -113,8 +124,26 @@ Future<Response> _getPhotoFileHandler(Request req) async {
|
||||
return Response.notFound('File not found');
|
||||
}
|
||||
|
||||
// ✅ 修复:使用 StreamController 包装,确保在客户端断开时关闭文件流
|
||||
final streamController = StreamController<List<int>>();
|
||||
final fileStream = file.openRead();
|
||||
|
||||
// 订阅文件流,并将数据转发到响应流
|
||||
final subscription = fileStream.listen(
|
||||
streamController.add,
|
||||
onError: streamController.addError,
|
||||
onDone: streamController.close,
|
||||
cancelOnError: true,
|
||||
);
|
||||
|
||||
// 当客户端取消订阅时(断开连接),取消文件流订阅并关闭文件
|
||||
streamController.onCancel = () {
|
||||
subscription.cancel();
|
||||
return Future.value();
|
||||
};
|
||||
|
||||
return Response.ok(
|
||||
file.openRead(),
|
||||
streamController.stream,
|
||||
headers: {
|
||||
'Content-Type': photo.mimeType,
|
||||
'Content-Length': photo.fileSize.toString(),
|
||||
@@ -122,8 +151,6 @@ Future<Response> _getPhotoFileHandler(Request req) async {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Future<Response> _getPhotosOfAlbumHander(Request req) async {
|
||||
final idParam = req.params['id'];
|
||||
if (idParam == null) {
|
||||
|
||||
Reference in New Issue
Block a user