Skip to content

Commit 727a8b8

Browse files
committed
Implemented streamFile()
1 parent 3eafa17 commit 727a8b8

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

src/ESPWebServer.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,13 @@ String ESPWebServer::hostHeader() {
222222
return header("Host");
223223
}
224224

225+
void ESPWebServer::_prepareStreamFile(size_t fileSize, const String& contentType) {
226+
_contentLength = fileSize;
227+
_activeResponse->setStatusCode(200);
228+
_activeResponse->setHeader("Content-Type", contentType.c_str());
229+
_standardHeaders();
230+
}
231+
225232
void ESPWebServer::send(int code, const char* content_type, const String& content) {
226233
_contentLength = content.length();
227234
_activeResponse->setStatusCode(code);

src/ESPWebServer.hpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,20 @@ class ESPWebServer
107107

108108
static String urlDecode(const String& text);
109109

110-
//template<typename T> size_t streamFile(T &file, const String& contentType);
110+
template<typename T> size_t streamFile(T &file, const String& contentType) {
111+
size_t fileSize = file.size();
112+
uint8_t buffer[HTTP_UPLOAD_BUFLEN];
113+
_prepareStreamFile(fileSize, contentType);
114+
size_t didWrite = 0;
115+
while (fileSize > 0) {
116+
size_t thisRead = file.read(buffer, fileSize > HTTP_UPLOAD_BUFLEN ? HTTP_UPLOAD_BUFLEN : fileSize);
117+
if (thisRead == 0) break;
118+
_activeResponse->write(buffer, thisRead);
119+
didWrite += thisRead;
120+
fileSize -= thisRead;
121+
}
122+
return didWrite;
123+
}
111124

112125
protected:
113126
friend class ESPWebServerNode;
@@ -118,6 +131,9 @@ class ESPWebServer
118131
/** Add standard headers */
119132
void _standardHeaders();
120133

134+
/** Prepare for streaming a file */
135+
void _prepareStreamFile(size_t fileSize, const String& contentType);
136+
121137
/** The backing server instance */
122138
httpsserver::HTTPServer _server;
123139

0 commit comments

Comments
 (0)