Arduino-ESP32 http客户端获取远程服务器文件并存SD卡

实现

#include <HTTPClient.h>
#include <WiFi.h>

void getFile(String file_name)
{
	HTTPClient http;
	Serial.print("[HTTP] begin...\n");
	String storage_path = "/image/" + file_name;

	http.begin("http://host:port/file/" + file_name);

	Serial.print("[HTTP] GET...\n");
	int httpCode = http.GET();
	if (httpCode > 0)
	{
		Serial.printf("[HTTP] GET... code: %d\n", httpCode);

		if (httpCode == HTTP_CODE_OK)
		{
			int len = http.getSize();

			Serial.print("file size: ");
			Serial.print(len);
			Serial.print("Byte(");
			Serial.print(len / 1024);
			Serial.println("kB)");

			WiFiClient *stream = http.getStreamPtr();

			Serial.println(stream->available());
			// read all data from server
			while (http.connected() && (len > 0 || len == -1))
			{
				size_t size = stream->available();
				if (size)
				{
					size_t read_size = ((size > sizeof(buff)) ? sizeof(buff) : size);
					int c = stream->readBytes(buff, read_size);
					buff[read_size] = 0;
					tf.appendBinToSd(storage_path.c_str(), buff, read_size);
					Serial.print(".");
					if (len > 0)
					{
						len -= c;
					}
				}
			}
			Serial.println();
			Serial.print("[HTTP] connection closed or file end.\n");
		}
	}
	else
	{
		Serial.printf("[HTTP] GET... failed, error: %s\n",
					  http.errorToString(httpCode).c_str());
	}

	http.end();
}
上一篇:蓝桥云课linux入门:用户及文件权限管理


下一篇:ESP32-S2原生USB 烧录 TinyUF2 bootloader 加 CircuitPython