ESP8266学习 六 通过闪存文件系统上传web端程序
使用闪存文件系统建立功能更加丰富的网络服务器
- 掌握了如何向ESP8266开发板的闪存文件上传文件,我们就有了更多的空间来存储更加丰富的网页资源,从而让我们实现功能更加丰富的物联网项目。
- 本节教程里,我们将向您介绍一系列ESP8266开发板搭建的网页服务示例
- 在网页中加载闪存文件系统中的图片、CSS和JavaScript
- 请点击以上链接将本实例所用的示例程序下载并解压缩。在本示例中,您将看到data文件夹一共有5个文件和一个文件夹。以下是各个文件的作用:
- index.html:ESP8266开发板建立的网站首页
- main.css:控制网页的css(层叠样式表)
- JavaScript.js和clock.js:在页面中显示日期和时钟的JavaScript文件。这两个程序主要用于演示如何在ESP8266开发板所建立的物联网页面中显示JavaScript
- img目录中的图片taichi-maker.jpg:此图片用于演示如何在ESP8266开发板所建立的物联网页面中显示图片
#include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266WebServer.h> #include <FS.h> ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti对象ESP8266WebServer esp8266_server(80); // 建立网络服务器对象,该对象用于响应HTTP请求。监听端口(80)void setup() {Serial.begin(9600); // 启动串口通讯Serial.println("");wifiMulti.addAP("TP-LINK_7AAD", "LKQ123456+"); // 这三条语句通过调用函数addAP来记录3个不同的WiFi网络信息。wifiMulti.addAP("CMCC-3289", "15208883289"); // 这3个WiFi网络名称分别是taichi-maker, taichi-maker2, taichi-maker3。wifiMulti.addAP("CMCC-3289-5G", "15208883289"); // 这3个网络的密码分别是123456789,87654321,13572468。Serial.println("Connecting ..."); // 则尝试使用此处存储的密码进行连接。int i = 0; while (wifiMulti.run() != WL_CONNECTED) { // 尝试进行wifi连接。delay(1000);Serial.print(i++); Serial.print(' ');}// WiFi连接成功后将通过串口监视器输出连接成功信息 Serial.println('\n');Serial.print("Connected to ");Serial.println(WiFi.SSID()); // 通过串口监视器输出连接的WiFi名称Serial.print("IP address:\t");Serial.println(WiFi.localIP()); // 通过串口监视器输出ESP8266-NodeMCU的IPif(SPIFFS.begin()){ // 启动闪存文件系统Serial.println("SPIFFS Started.");} else {Serial.println("SPIFFS Failed to Start.");}esp8266_server.onNotFound(handleUserRequet); // 告知系统如何处理用户请求esp8266_server.begin(); // 启动网站服务Serial.println("HTTP server started"); }void loop(void) {esp8266_server.handleClient(); // 处理用户请求 }// 处理用户浏览器的HTTP访问 void handleUserRequet() { // 获取用户请求网址信息String webAddress = esp8266_server.uri();// 通过handleFileRead函数处处理用户访问bool fileReadOK = handleFileRead(webAddress);// 如果在SPIFFS无法找到用户访问的资源,则回复404 (Not Found)if (!fileReadOK){ esp8266_server.send(404, "text/plain", "404 Not Found"); } }bool handleFileRead(String path) { //处理浏览器HTTP访问if (path.endsWith("/")) { // 如果访问地址以"/"为结尾path = "/index.html"; // 则将访问地址修改为/index.html便于SPIFFS访问} String contentType = getContentType(path); // 获取文件类型if (SPIFFS.exists(path)) { // 如果访问的文件可以在SPIFFS中找到File file = SPIFFS.open(path, "r"); // 则尝试打开该文件esp8266_server.streamFile(file, contentType);// 并且将该文件返回给浏览器file.close(); // 并且关闭文件return true; // 返回true}return false; // 如果文件未找到,则返回false }// 获取文件类型 String getContentType(String filename){if(filename.endsWith(".htm")) return "text/html";else if(filename.endsWith(".html")) return "text/html";else if(filename.endsWith(".css")) return "text/css";else if(filename.endsWith(".js")) return "application/javascript";else if(filename.endsWith(".png")) return "image/png";else if(filename.endsWith(".gif")) return "image/gif";else if(filename.endsWith(".jpg")) return "image/jpeg";else if(filename.endsWith(".ico")) return "image/x-icon";else if(filename.endsWith(".xml")) return "text/xml";else if(filename.endsWith(".pdf")) return "application/x-pdf";else if(filename.endsWith(".zip")) return "application/x-zip";else if(filename.endsWith(".gz")) return "application/x-gzip";return "text/plain"; }
代码: 文件详情
- 先上传文件夹
- 然后烧录代码
- 当我们找不到函数是就会调用 onNotFound 函数 当我们不用on函数请求时就会直接用onNotFound 进行请求 当有浏览器向服务器发送请求时就会调用通过handleFileRead函数处处理用户访问 如果找到了请求的数据内容就返回真值 否则就返回假;当我们请求首页信息时就将"/"替换为"/index.html"把浏览器所请求的信息与闪存文件系统内的文件名对应起来
- 对请求分析 如图首先对首页进行请求 之后为.css 后为时钟的.js 和太极创客的logo图片
- 通过一个字符串变量去得到文件类型,
- 重点:读取文件之后 将这个文件返回给浏览器
- 通过对请求的文件结尾的判断 返回相应字符串 告诉服务器现在需要的文件类型是什么。,
- 通过这次实验 我们可以结合自己所学web知识展示更加丰富的界面,只需修改web文件的内容便可以完成。
ESP8266学习 六 通过闪存文件系统上传web端程序相关推荐
- ESP8266-NodeMCU网络服务器——通过网页将文件上传到闪存文件系统
ESP8266WebServer esp8266_server(80); / 建立网络服务器对象,该对象用于响应HTTP请求.监听端口(80) File fsUploadFile; / 建立文件对象用 ...
- ESP8266 NodeMCU 闪存文件系统(SPIFFS)
目录 闪存文件系统 ESP8266闪存文件系统基本操作 1. 通过程序向闪存文件系统写入信息 2. 通过程序从闪存文件系统读取信息 3. 通过程序向闪存文件系统文件添加信息 4. 通过程序读取目录内容 ...
- Esp32-Arduino 学习(闪存文件系统)
目录 闪存文件写入 闪存文件读取 闪存文件删除 从Arduino IDE 上传文件 注:本文代码来自于太极创客团队: www.taichi-maker.com,由于太极创客的教程是基于esp8266, ...
- 闪存文件系统(Flash File System)
最近调研了一下闪存文件系统,部分结果展示如下,如有错误欢迎评论指正~ 一.背景 闪存(flash memory),是一种电子式可清除程序化存储器的形式,允许在操作中被多次擦或写的存储器. 随着现在闪存 ...
- 闪存驱动器_“空”和新格式化的闪存驱动器上如何有可用空间?
闪存驱动器 When you delete everything from a flash drive and reformat it, you would think it should 'disp ...
- ESP32利用SPIFFS(闪存文件系统)创建 Web服务器实现引脚控制
ESP32利用SPIFFS(闪存文件系统)创建 Web服务器实现引脚控制 在本教程中,我们将向您展示如何构建一个web服务器,以提供存储在ESP32文件系统中的HTML和CSS文件.我们将创建分离的H ...
- Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序
OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...
- 解决从本地文件系统上传到HDFS时的权限问题
解决从本地文件系统上传到HDFS时的权限问题 参考文章: (1)解决从本地文件系统上传到HDFS时的权限问题 (2)https://www.cnblogs.com/hapjin/p/4846853.h ...
- 存储桶上传策略和签名 URL的绕过及利用
本文中带有自己一些拙见,读者若存在相关问题或者有其他想法的,欢迎在评论区交流探讨.原文:https://labs.detectify.com/2018/08/02/bypassing-exploiti ...
最新文章
- 网络系统工程师的最终归宿(一)创业还是打工
- day3----python变量与常量
- tkinter的可视化拖拽工具_可视化越做越丑?这五个高级图表效果实现流程分享给你...
- 《数据中台:让数据用起来》读书笔记
- 寻java、.net、或C#兼职程序开发人员(上海)
- “金嗓子”宣布退市!曾因罗纳尔多代言争议爆红,广告词家喻户晓…
- linux之at,crontab
- SolrJ 查询数据
- 备战2022软考网络管理员(1)介绍与开篇
- 武汉理工大学计算机学院宿舍,武汉理工大学专业所属校区及新生住宿分布情况(v2.0)...
- 在线教育需要准备好哪些直播设备?
- DP动态规划--乡村邮局问题-Post Office(POJ-1160)python
- (附源码)springboot闲置衣物捐赠系统 毕业设计 021009
- vue实现某一区域滚动,头部底部固定,中间滚动
- B-spline算法(B样条曲线)
- html语言中hr是什么意思,网页制作中的hr是什么意思
- qtabwidget设置表头_Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例...
- 1367. 二叉树中的列表
- 【java后端学习路线3】SSM+Linux+Git学习指南,985本海硕自学转码
- 解决Win10安装DirectX报错:不能信任一个安装所需的压缩文件,请检查加密服务是否启用并且Cabinet文件证书是否有效