SDWebSarverスケッチでSD内特定ファイルを開かせない方法
問題解決できました。
スケッチ例SDWebSarverを使ってESP-WROOM-02マイコンに
接続したSDメモリから、設定ファイルを読み込んでWiFi
接続する方法では、SDメモリ内のファイルがwebブラウザ
で見えてしまう問題点がありました。
たぶん例外なく見えてしまうので、設定ファイルに書かれた
SSID、Passwordが見えてしまうことになります。
これは解決しないとせっかくの便利な機能が使えません。
解決方法を検討しました。
・ファイルの関連付け(?)を"image/png"とか指定する方法
→開けなくなるが、ページのソースから見えてしまう。NG
・指定したファイルの時はファイルを開く処理をしない方法
→開けない&見えない。OK(採用)
Webページの表示はこのようになります。
変更内容
スケッチ例SDWebServer内の関数に4行を書き加えています。
開かせないファイルは /setup/setup.txt です。
編集した関数を掲載しました。(追加部分は表示あり)
行数を減らすための編集をしているので、
オリジナルと違うところがありますが動作は変わりません。
bool loadFromSdCard(String path) {
String dataType = "text/plain";
if (path.endsWith("/")) path += "index.htm";
if (path.endsWith(".src")) path = path.substring(0, path.lastIndexOf("."));
else if (path.endsWith(".htm")) dataType = "text/html";
else if (path.endsWith(".css")) dataType = "text/css";
else if (path.endsWith(".js")) dataType = "application/javascript";
else if (path.endsWith(".png")) dataType = "image/png";
else if (path.endsWith(".gif")) dataType = "image/gif";
else if (path.endsWith(".jpg")) dataType = "image/jpeg";
else if (path.endsWith(".ico")) dataType = "image/x-icon";
else if (path.endsWith(".xml")) dataType = "text/xml";
else if (path.endsWith(".pdf")) dataType = "application/pdf";
else if (path.endsWith(".zip")) dataType = "application/zip";//行数減のために省略編集したのでオリジナルと違っています。
if (path == "/setup/setup.txt") {//追加部分 setup.txtを開かせない
server.send(404, "text/plain", "");//追加部分
} else { //追加部分
File dataFile = SD.open(path.c_str());
if (dataFile.isDirectory()) {
path += "/index.htm";
dataType = "text/html";
dataFile = SD.open(path.c_str());
}
if (!dataFile) {
return false;
}
if (server.hasArg("download")) {
dataType = "application/octet-stream";
}
if (server.streamFile(dataFile, dataType) != dataFile.size()) {
DBG_OUTPUT_PORT.println("Sent less data than expected!");
}
dataFile.close();
return true;
}//追加部分
}
スケッチ例SDWebServer内の関数loadFromSdCard()部分の抜粋なので
これだけでは動作しません。
オリジナルのスケッチに追加部分をコピペするのが
良いと思います。
無保証自己責任でよろしくおねがいします。
コメント
コメントを投稿