我正在使用 Adafruit HUZZAH ESP8266 开发网络摄像头。我正在使用 TTL 串行 JPEG 相机拍摄图像。网页最初发送带有标签的响应,然后触发 handle_picture 函数。这应该只是将一个 jpeg 文件发送到浏览器。
我遇到的问题似乎与 server.streamFile 函数有关。在下面的代码片段中,该函数似乎没有读取和发送整个文件。
代码:
全选void handle_picture() {
byte clientBuf[64];
char filename[13];
strcpy(filename, "IMAGE01.JPG");
filename[5] = '0' + FileNum / 10;
filename[6] = '0' + FileNum % 10;
int32_t
time = millis();
// strcpy(filename, "/test1.jpg"); // DEBUG only
f = SPIFFS.open(filename, "r");
if (!f) {
Serial.print("file open failed: ");
Serial.println(filename);
} else {
Serial.print("file opened: ");
Serial.println(filename);
}
int filesize = f.size();
Serial.print("File size ");
Serial.println(filesize); //For debugging only
String WebString = "";
WebString += "HTTP/1.1 200 OKrn";
WebString += "Content-Type: image/jpegrn";
WebString += "Content-Length: " + String(filesize) + "rn";
WebString += "rn";
server.sendContent(WebString);
Serial.println (WebString);
ESP.wdtFeed();
count = 0;
size_t sent = server.streamFile(f,"image/jpeg");
Serial.print(sent);
Serial.println(" Bytes sent!");
f.close();
time = millis() - time;
Serial.print(time); Serial.println(" ms elapsed");
}// END handle_picture
如您所见,输出显示了一个 45012 字节的文件,但是 streamFile 只发送了 4380 字节!
代码:
全选Image size: 640x480
HTTP server started
Picture taken!
File number = 6
Filename: IMAGE06.JPG
Storing 45012 byte image.
...........................................*
File stored!
24623 ms elapsed
170853 mS Elasped for snapshot.
file opened: IMAGE06.JPG
File size 45012
HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 45012
4380 Bytes sent!
43 ms elapsed