File tree 2 files changed +24
-1
lines changed
2 files changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -222,6 +222,13 @@ String ESPWebServer::hostHeader() {
222
222
return header (" Host" );
223
223
}
224
224
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
+
225
232
void ESPWebServer::send (int code, const char * content_type, const String& content) {
226
233
_contentLength = content.length ();
227
234
_activeResponse->setStatusCode (code);
Original file line number Diff line number Diff line change @@ -107,7 +107,20 @@ class ESPWebServer
107
107
108
108
static String urlDecode (const String& text);
109
109
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
+ }
111
124
112
125
protected:
113
126
friend class ESPWebServerNode ;
@@ -118,6 +131,9 @@ class ESPWebServer
118
131
/* * Add standard headers */
119
132
void _standardHeaders ();
120
133
134
+ /* * Prepare for streaming a file */
135
+ void _prepareStreamFile (size_t fileSize, const String& contentType);
136
+
121
137
/* * The backing server instance */
122
138
httpsserver::HTTPServer _server;
123
139
You can’t perform that action at this time.
0 commit comments