provide original name so proper content type is set for gzipped content
This commit is contained in:
parent
d8809137a3
commit
dc5b7f708a
|
@ -186,14 +186,14 @@ class AsyncWebServerRequest {
|
|||
void send(AsyncWebServerResponse *response);
|
||||
void send(int code, String contentType=String(), String content=String());
|
||||
void send(FS &fs, String path, String contentType=String(), bool download=false);
|
||||
void send(File content, String contentType=String(), bool download=false);
|
||||
void send(File content, String path, String contentType=String(), bool download=false);
|
||||
void send(Stream &stream, String contentType, size_t len);
|
||||
void send(String contentType, size_t len, AwsResponseFiller callback);
|
||||
void sendChunked(String contentType, AwsResponseFiller callback);
|
||||
|
||||
AsyncWebServerResponse *beginResponse(int code, String contentType=String(), String content=String());
|
||||
AsyncWebServerResponse *beginResponse(FS &fs, String path, String contentType=String(), bool download=false);
|
||||
AsyncWebServerResponse *beginResponse(File content, String contentType=String(), bool download=false);
|
||||
AsyncWebServerResponse *beginResponse(File content, String path, String contentType=String(), bool download=false);
|
||||
AsyncWebServerResponse *beginResponse(Stream &stream, String contentType, size_t len);
|
||||
AsyncWebServerResponse *beginResponse(String contentType, size_t len, AwsResponseFiller callback);
|
||||
AsyncWebServerResponse *beginChunkedResponse(String contentType, AwsResponseFiller callback);
|
||||
|
|
|
@ -106,6 +106,10 @@ bool AsyncStaticWebHandler::_fileExists(AsyncWebServerRequest *request, const St
|
|||
bool found = fileFound || gzipFound;
|
||||
|
||||
if (found) {
|
||||
size_t plen = path.length();
|
||||
char * _tempPath = (char*)malloc(plen+1);
|
||||
snprintf(_tempPath, plen+1, "%s", path.c_str());
|
||||
request->_tempObject = (void*)_tempPath;
|
||||
_gzipStats = (_gzipStats << 1) + gzipFound ? 1 : 0;
|
||||
_fileStats = (_fileStats << 1) + fileFound ? 1 : 0;
|
||||
_gzipFirst = _countBits(_gzipStats) > _countBits(_fileStats);
|
||||
|
@ -125,7 +129,9 @@ uint8_t AsyncStaticWebHandler::_countBits(const uint8_t value)
|
|||
void AsyncStaticWebHandler::handleRequest(AsyncWebServerRequest *request)
|
||||
{
|
||||
if (request->_tempFile == true) {
|
||||
AsyncWebServerResponse * response = new AsyncFileResponse(request->_tempFile);
|
||||
AsyncWebServerResponse * response = new AsyncFileResponse(request->_tempFile, String((char*)request->_tempObject));
|
||||
free(request->_tempObject);
|
||||
request->_tempObject = NULL;
|
||||
if (_cache_header.length() != 0)
|
||||
response->addHeader("Cache-Control", _cache_header);
|
||||
request->send(response);
|
||||
|
|
|
@ -651,9 +651,9 @@ AsyncWebServerResponse * AsyncWebServerRequest::beginResponse(FS &fs, String pat
|
|||
return NULL;
|
||||
}
|
||||
|
||||
AsyncWebServerResponse * AsyncWebServerRequest::beginResponse(File content, String contentType, bool download){
|
||||
AsyncWebServerResponse * AsyncWebServerRequest::beginResponse(File content, String path, String contentType, bool download){
|
||||
if(content == true)
|
||||
return new AsyncFileResponse(content, contentType, download);
|
||||
return new AsyncFileResponse(content, path, contentType, download);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -685,9 +685,9 @@ void AsyncWebServerRequest::send(FS &fs, String path, String contentType, bool d
|
|||
} else send(404);
|
||||
}
|
||||
|
||||
void AsyncWebServerRequest::send(File content, String contentType, bool download){
|
||||
void AsyncWebServerRequest::send(File content, String path, String contentType, bool download){
|
||||
if(content == true){
|
||||
send(beginResponse(content, contentType, download));
|
||||
send(beginResponse(content, path, contentType, download));
|
||||
} else send(404);
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ class AsyncFileResponse: public AsyncAbstractResponse {
|
|||
void _setContentType(String path);
|
||||
public:
|
||||
AsyncFileResponse(FS &fs, String path, String contentType=String(), bool download=false);
|
||||
AsyncFileResponse(File content, String contentType=String(), bool download=false);
|
||||
AsyncFileResponse(File content, String path, String contentType=String(), bool download=false);
|
||||
~AsyncFileResponse();
|
||||
bool _sourceValid(){ return !!(_content); }
|
||||
size_t _fillBuffer(uint8_t *buf, size_t maxLen);
|
||||
|
|
|
@ -376,16 +376,16 @@ AsyncFileResponse::AsyncFileResponse(FS &fs, String path, String contentType, bo
|
|||
_contentLength = _content.size();
|
||||
}
|
||||
|
||||
AsyncFileResponse::AsyncFileResponse(File content, String contentType, bool download){
|
||||
AsyncFileResponse::AsyncFileResponse(File content, String path, String contentType, bool download){
|
||||
_code = 200;
|
||||
_content = content;
|
||||
_path = String(_content.name());
|
||||
_path = path;
|
||||
_contentLength = _content.size();
|
||||
int filenameStart = _path.lastIndexOf('/') + 1;
|
||||
char buf[26+_path.length()-filenameStart];
|
||||
char* filename = (char*)_path.c_str() + filenameStart;
|
||||
|
||||
if(!download && _path.endsWith(".gz"))
|
||||
if(!download && String(_content.name()).endsWith(".gz"))
|
||||
addHeader("Content-Encoding", "gzip");
|
||||
|
||||
if(contentType == "")
|
||||
|
|
Loading…
Reference in New Issue