首页 > 其他分享 >axum处理静态文件

axum处理静态文件

时间:2023-11-02 09:56:40浏览次数:38  
标签:文件 axum rs 静态 处理 static txt

和其它 Web 框架一样,axum 也会对所有请求进行处理。对于 CSS、JS 及图片等静态文件,并不需要 axum 的 handler 进行处理,而是只需要简单的把它们的内容进行返回即可。axum 提供了处理静态文件的中间件。

首先,我们创建一个名为 static 的目录,并在其中创建一个 axum-rs.txt 的文本文件,内容随意,比如:

Welcome to axum.rs!
Email: [email protected]

使用 handler 处理

现在的问题是,我们如何才能在浏览器中访问到这个文件呢?按照它的目录,我们试试 /static/axum-rs.txt

$ curl -i 127.0.0.1:9527/static/axum-rs.txt
HTTP/1.1 404 Not Found
content-length: 0
date: Wed, 17 Nov 2021 09:16:51 GMT

可以发现,HTTP 的状态码是 404,即找不到该资源。为了解决这个问题,我们可以定义一个 handler:

async fn axum_rs_txt() -> String {
    std::fs::read_to_string("static/axum-rs.txt").unwrap()
}

然后定义路由:

let app = Router::new().route("/static/axum-rs.txt", axum::routing::get(axum_rs_txt));

访问试试:

$ curl -i 127.0.0.1:9527/static/axum-rs.txt
HTTP/1.1 200 OK
content-type: text/plain
content-length: 40
date: Wed, 17 Nov 2021 09:17:44 GMT

Welcome to axum.rs!
Email: [email protected]

很好,搞定了。问题是,如果有成千上万个静态资源要处理呢?这种方式显然不够好。

使用中间件处理

首先,加入 tower-http 依赖:

tower-http = { version = "0.1", features = ["fs"] }

修改路由定义:

let app = Router::new().nest(
        "/static",
        service::get(ServeDir::new("static")).handle_error(|err| {
            (
                StatusCode::INTERNAL_SERVER_ERROR,
                format!("处理静态资源出错:{:?}", err),
            )
        }),
    );

解释一下:

  • /static:指定 URL 访问静态资源时的前缀,比如:/static/axum.rs

  • ServeDir::new("static"):指定静态文件存放在服务器上的路径

有了这个中间件之后,所有静态资源放到static目录即可,不需要对代码进行改动了。

截止发稿为止,axum 官方最近的 git 提交中的“静态文件服务”的示例代码无法编译。

本章讨论了使用 axum 处理静态资源的方法,完整代码可以在代码库中找到。

标签:文件,axum,rs,静态,处理,static,txt
From: https://www.cnblogs.com/pythonClub/p/17804734.html

相关文章

  • axum的状态共享
    状态共享是指,在整个应用或不同路由之间,共享一份数据。axum提供了方便的状态共享机制,但可能也会踩坑。本章将带你学习如何在axumweb应用中共享状态。如何进行状态共享axum使用 Layer 来实现状态共享。定义路由时,使用 layer() 加入要共享的数据,在需要获取该共享数据的......
  • [Vue]组件入门——非单文件组件
     Vue中使用组件的三大步骤:1.定义组件(创建组件)  使用Vue.extend(options)创建,其中options和newVue(options)时传入的options几乎一样,但有点区别:  (1)el不要写:最终所有的组件都要经过一个vm的管理,由vm中的el决定服务哪个容器  (2)data必须写成函数:避......
  • m基于FPGA的8FSK调制解调系统verilog实现,包含testbench测试文件
    1.算法仿真效果vivado2019.2仿真结果如下:    将波形放大,看到如下效果:    2.算法涉及理论知识概要       8FSK(8-FrequencyShiftKeying)是一种常用的数字调制方法,它通过在不同的频率上发送二进制数据来进行通信。8FSK在通信系统中被广泛应用,因为它具......
  • # yyds干货盘点 # 导入的xls文件,数字和日期都是文本格式,到df3都正常,但df4报错,什么原因
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【斌】问了一个Pandas数据处理的问题,一起来看看吧。我之前用过xls,现在练习pandas:目前导入的xls文件,数字和日期都是文本格式,到df3都正常,但df4报错,df4是算加权平均。下图是报错截图:二、实现过程这里我和【黑科技·鼓包】、【瑜......
  • 使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令
    背景最近面对一个庞大的项目,但是只需要修改某个模块,每次都手搓命令太麻烦了,于是就想着能不能写个脚本来辅助处理这些事情。解决方案定制化一键ESLint,执行文件下载地址:https://github.com/mazeyqian/go-gin-gee/releases/tag/v1.4.0基础使用以下案例以macOS为例,其他系统......
  • 导入的xls文件,数字和日期都是文本格式,到df3都正常,但df4报错,什么原因?
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【斌】问了一个Pandas数据处理的问题,一起来看看吧。我之前用过xls,现在练习pandas:目前导入的xls文件,数字和日期都是文本格式,到df3都正常,但df4报错,df4是算加权平均。下图是报错截图:二、实现过程这里我和【黑科技·鼓包】......
  • Python筛选多个Excel中数据缺失程度最少的文件
      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件内、某一列数据的特征,对其加以筛选,并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法。  首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel表格文件(在......
  • 后端处理一个较大的json文件返回数据给前端太慢该如何优化?
    要优化后端处理较大JSON文件并提高返回数据给前端的速度,可以尝试以下几种方法:优化数据库查询:如果你的后端从数据库中提取数据并将其转换为JSON格式,可以优化数据库查询来提高效率。确保使用适当的索引和优化查询语句。逐步加载数据:将大型JSON文件分割成较小的块,并使用分页或滚动加载......
  • 系统编程:控制文件I/O的内核缓冲之sync(),fsync()和fdatasync()
        通过系统编程:从write()和fwrite()谈开来我们知道了系统调用和glibc库函数为了提升性能而设立的缓冲区,那么,什么情况下数据会从上一次缓冲区刷新到下一层存储介质(可能是缓冲区,也可能是永久存储介质)呢?fflush()库函数提供了强制将stdio库函数缓冲区数据刷新到内核缓冲......
  • Json数据文件处理中遇到的一些问题总结(C++)
    一、海量数据处理的方法总结参考CSDN技术贴:海量数据处理方法C++面试必备-海量数据处理二、快速Json文件解析的库字节-json快速解析库三、无锁队列C++无锁队列四、C++打包静态库静态库和动态库Linux-(C/C++)生成并使用静态库/动态库c/c++依赖静态库、动态库符号问题在远......