You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino ESP8266如何分块下载大文件并写入SPIFFS?

分块下载文件到SPIFFS的ESP8266实现

以下是实现你需求的完整代码示例,包含分块下载(可指定分块大小)并写入SPIFFS的核心逻辑,同时补充了关键的错误检查环节:

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#include <FS.h>

int downloadFile(const char* url, const char* fileName, size_t chunkSize)
{
    // 初始化SPIFFS文件系统
    if (!SPIFFS.begin()) {
        return -1; // SPIFFS初始化失败
    }

    std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);
    client->setInsecure(); // 跳过SSL证书验证(仅测试场景使用,生产环境建议启用证书验证)

    HTTPClient https;
    if (!https.begin(*client, url)) {
        SPIFFS.end();
        return -2; // 连接目标服务器失败
    }

    // 发送GET请求并获取响应状态码
    int httpCode = https.GET();
    if (httpCode != HTTP_CODE_OK) {
        https.end();
        SPIFFS.end();
        return -3; // HTTP请求失败
    }

    // 打开SPIFFS文件准备写入
    File file = SPIFFS.open(fileName, "w");
    if (!file) {
        https.end();
        SPIFFS.end();
        return -4; // 文件打开失败
    }

    // 分块读取HTTP流并写入文件
    uint8_t buffer[1024]; // 缓冲区大小可按需调整,需不小于设定的chunkSize
    size_t bytesRead;
    while ((bytesRead = https.getStreamPtr()->readBytes(buffer, chunkSize)) > 0) {
        file.write(buffer, bytesRead);
        // 可选:调用file.flush()确保数据立即写入闪存,避免意外断电丢失数据
    }

    // 清理资源
    file.close();
    https.end();
    SPIFFS.end();

    return 0; // 下载与写入操作成功
}

关键逻辑说明

  • SPIFFS初始化:先确保文件系统正常启动,否则直接返回错误码终止操作。
  • HTTPClient流程:通过https.GET()获取HTTP响应状态码,仅当状态码为200(HTTP_CODE_OK)时才继续后续的分块读取。
  • 分块读取:使用getStreamPtr()->readBytes()从HTTP流中读取指定chunkSize的字节,返回实际读取的字节数,循环读取直到返回0(表示数据流结束)。
  • 文件写入:每次读取到分块数据后,调用file.write()将数据写入SPIFFS文件,可选调用file.flush()强制将缓存数据写入闪存。
  • 资源清理:操作完成后必须关闭文件、结束HTTPClient连接、关闭SPIFFS,避免资源泄漏。

注意事项

  • setInsecure()仅适合测试场景,生产环境建议配置正确的SSL证书验证,避免安全风险。
  • 缓冲区大小建议不小于设定的chunkSize,示例中使用1024字节是为了兼容更大的分块需求,你可以根据实际调整为100字节。
  • 如果下载大文件,建议添加进度提示或超时处理,避免长时间阻塞主线程影响设备其他功能。

内容的提问来源于stack exchange,提问作者First User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:13:23