Flutter静态资源管理插件angel3_static的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter静态资源管理插件angel3_static的使用

angel3_static 是一个用于Angel3框架的静态文件处理库,支持HTML、CSS和JS等静态资源的提供,并且能够处理Range请求,适合媒体流(如音乐、视频)的应用场景。

安装

在你的pubspec.yaml文件中添加依赖:

dependencies:
    angel3_static: ^8.0.0

确保你已经配置了正确的版本号。运行flutter pub get来安装这个包。

使用

为了从目录中提供文件服务,你需要创建一个VirtualDirectory实例。需要注意的是,angel3_static使用的是package:file而不是dart:io

下面是一个基本的例子展示如何设置静态资源服务器:

import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_framework/http.dart';
import 'package:angel3_static/angel3_static.dart';
import 'package:file/local.dart';

void main() async {
  var app = Angel();
  var fs = const LocalFileSystem();

  // 创建一个正常的静态服务器
  var vDir = VirtualDirectory(app, fs, source: Directory('./public'));

  // 如果你也想发送Cache-Control, ETag等头部信息,则可以使用CachingVirtualDirectory
  var cachingVDir = CachingVirtualDirectory(app, fs, source: Directory('./public'));

  // 挂载VirtualDirectory的请求处理器
  app.fallback(cachingVDir.handleRequest);

  // 启动服务器
  await AngelHttp(app).startServer('127.0.0.1', 3000);
}

Push State

VirtualDirectory还提供了一个pushState方法,返回一个请求处理器,在404错误发生时作为回退选项,除非用户正在请求那个特定的文件。这对于单页面应用(SPA)非常有用。

// 创建VirtualDirectory实例
var vDir = CachingVirtualDirectory(...);

// 挂载它
app.fallback(vDir.handleRequest);

// 当遇到404错误时,回退到index.html
app.fallback(vDir.pushState('index.html'));

选项

VirtualDirectory API接受几个命名参数:

  • source: 包含要提供的文件的Directory。如果留空,则Angel3将根据环境变量ANGEL_ENV选择从webbuild/web目录提供服务。
  • indexFileNames: 应作为索引页提供的文件名列表,默认是['index.html']
  • publicPath: 为了提供索引文件,你需要指定虚拟路径下angel3_static提供文件的位置。如果不是在网站根目录提供静态文件,请包含此参数。
  • callback: 在向客户端发送文件之前运行。可用于设置头部信息等。如果返回值不是nulltrue,则返回的结果将会代替文件内容发送给用户。

这里有一个更详细的示例代码,包括日志记录和MIME类型解析:

import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_framework/http.dart';
import 'package:angel3_static/angel3_static.dart';
import 'package:file/local.dart';
import 'package:logging/logging.dart';

void main(List<String> args) async {
  var app = Angel();
  var http = AngelHttp(app);
  var fs = const LocalFileSystem();
  var vDir = CachingVirtualDirectory(
    app,
    fs,
    allowDirectoryListing: true,
    source: args.isEmpty ? fs.currentDirectory : fs.directory(args[0]),
    maxAge: const Duration(days: 24).inSeconds,
  );

  app.mimeTypeResolver
    ..addExtension('', 'text/plain')
    ..addExtension('dart', 'text/dart')
    ..addExtension('lock', 'text/plain')
    ..addExtension('markdown', 'text/plain')
    ..addExtension('md', 'text/plain')
    ..addExtension('yaml', 'text/plain');

  app.logger = Logger('example')
    ..onRecord.listen((rec) {
      print(rec);
      if (rec.error != null) print(rec.error);
      if (rec.stackTrace != null) print(rec.stackTrace);
    });

  app.fallback(vDir.handleRequest);
  app.fallback((req, res) => throw AngelHttpException.notFound());

  var server = await http.startServer('127.0.0.1', 3000);
  print('Serving from ${vDir.source.path}');
  print('Listening at http://${server.address.address}:${server.port}');
}

这段代码展示了如何配置一个简单的静态资源服务器,同时处理了MIME类型解析和日志记录。


更多关于Flutter静态资源管理插件angel3_static的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter静态资源管理插件angel3_static的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是关于如何在Flutter项目中使用angel3_static插件来管理静态资源的示例代码。angel3_static是一个用于Dart服务器的静态文件服务插件,虽然它并不是专门为Flutter客户端设计的,但可以在Flutter项目的后端服务部分使用,以提供静态资源(如图片、CSS、JavaScript文件等)。

首先,确保你的Flutter项目已经包含了后端服务部分,或者你可以创建一个简单的Dart服务器来演示。

1. 添加依赖

在你的pubspec.yaml文件中添加angel3_static依赖:

dependencies:
  angel3_framework: ^4.0.0
  angel3_static: ^4.0.0

然后运行flutter pub get来安装依赖。

2. 创建Dart服务器

在你的项目根目录下创建一个新的Dart文件,例如server.dart,并添加以下代码来设置服务器和静态文件服务:

import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_static/angel3_static.dart';

void main() async {
  // 创建一个Angel应用实例
  var app = Angel();

  // 配置静态文件服务
  var static = configureStatic(app.directory!.parent!.parent! / 'web'); // 假设静态文件存放在'web'文件夹中

  // 使用静态文件中间件
  app.use('/static', static);

  // 启动服务器
  var server = await app.listen(3000);

  print('Server is running on http://localhost:3000');
}

在上面的代码中,我们做了以下几件事:

  • 创建了一个Angel应用实例。
  • 使用configureStatic函数配置了静态文件服务,指定了静态文件存放的目录(在这个例子中,我们假设静态文件存放在项目的web文件夹中)。
  • 使用app.use方法将静态文件中间件挂载到/static路径上。
  • 启动服务器并监听3000端口。

3. 准备静态文件

在你的项目根目录下创建一个web文件夹,并在其中添加一些静态文件,例如index.htmlstyle.cssscript.js

例如,web/index.html的内容可以是:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Static Files Example</title>
    <link rel="stylesheet" href="/static/style.css">
</head>
<body>
    <h1>Hello, Angel3 Static!</h1>
    <script src="/static/script.js"></script>
</body>
</html>

4. 运行服务器

在终端中运行dart run server.dart来启动服务器。

5. 访问静态资源

打开浏览器并访问http://localhost:3000/static/index.html,你应该能够看到由服务器提供的静态页面。

这个示例展示了如何使用angel3_static插件在Flutter项目的后端服务部分管理静态资源。虽然Flutter主要用于构建客户端应用,但这样的后端服务可以与Flutter客户端进行通信,提供所需的静态资源或其他API服务。

回到顶部