SPIFFS 只能安装在Arduino上。LittleFS支持Arduino IDE和VScode的 PlatformIO。
SPIFFS
-
serveStatic:
server.serveStatic("/", SPIFFS, "/")
负责提供 SPIFFS 文件系统中的文件。您可以在 SPIFFS 上放置.gz
文件,并该方法将自动处理它们。 -
MIME 类型: 在这个例子中,
request->send(SPIFFS, "/example.gz", "application/javascript", true);
将.gz
文件的 MIME 类型设置为application/javascript
。您可以根据文件的实际类型(例如,如果是 CSS,可以使用text/css
)进行调整。 -
gzip 内容编码: 参数
true
指定将启用内容编码,这将发送Content-Encoding: gzip
头。这对于告知浏览器接收到的文件是压缩的至关重要。 -
404 异常处理: 修改了
onNotFound
的处理程序,以便返回404
状态码,而不是400
。
LittleFS
-
手动处理: LittleFS 是一种更灵活的文件系统,可能没有内置相同的自动处理机制。为了支持 gzip 文件并告知浏览器这些文件经过压缩,您需要手动添加
Content-Encoding
头部。 -
兼容性: 由于 LittleFS 更专注于灵活性和性能,可能在处理某些 MIME 类型时不自动添加一些 HTTP 头部,如
Content-Encoding
。这要求开发者在响应中手动设置这些头部
上述2点只看文字无法深有体会。先以实例验证。
ESP32代码
27_VueJs vendor中的vue.min.js.gz是vue的文件,为了节约文件体积采用gz压缩上传至ESP32的FLASH。如果用
上传,则浏览器可以从ESP32获取到vue.min.js文件并正确渲染,效果如下图:
但如果使用Arduino IDE 的
LittleFS上传同样的文件, 浏览器则不能正确渲染。原因是LittleFS需要手动添加 Content-Encoding
头部对gzip支持。
response->addHeader("Content-Encoding", "gzip"); // 添加 Content-Encoding 头