<!DOCTYPE html> <html lang="zh-CN"> <head> <meta name="viewport" content="width=device-width, initial-scale=1" charset="utf-8"> <title>固件升级</title> </head> <body> <h2>固件升级</h2> <hr> <a href="http://192.168.4.1" style="font-size: smaller;">[返回首页]</a><br><br> <!-- 选择文本按钮 --> <label for="newFile">加载文件:</label> <input id="newFile" type="file" accept=".bin" onchange="checkFile()"> <br><br> <!-- 上传操作 --> <label for="otaStart">执行操作:</label> <button id="otaStart" type="button" onclick="otaStart()">开始升级</button> <button id="reload" type="button" onclick="reload()">刷新界面</button> <br><br> <!-- 进度显示 --> <label for="otaPercent">进度显示:</label> <input id="otaPercent" type="text" value="0.00%" style="width: 75px;border: none;font-size:large;"> <progress id="otaProgress" value="0" max="100"></progress> <br><br><hr> <p id="viewName"></p> <p id="viewSize"></p> <p id="viewFlashStart"></p> <p id="viewFlashResult"></p> <script> function reload() { location.reload(); } function getFileSize(size) { if (!size) return ""; var num = 1024.00; if (size < num) { return size + "B"; } if (size < Math.pow(num, 2)) { return (size / num).toFixed(2) + "KB"; } if (size < Math.pow(num, 3)) { return (size / Math.pow(num, 2)).toFixed(2) + "MB"; } } function checkFile() { var newFile = document.getElementById("newFile").files[0]; var newFileName = newFile.name; var newFileSize = newFile.size; if (newFileSize > 2 * 1024 * 1024) { alert('所选文件超出最大限制\n点击确定后将自动刷新页面'); location.reload(); } else { document.getElementById("viewName").innerHTML = "文件名称:" + newFileName; document.getElementById("viewSize").innerHTML = "文件大小:" + getFileSize(newFileSize); } } function otaStart() { var res = document.getElementById("newFile").files[0]; if (typeof (res) == "undefined") { alert('未选择文件!'); } else { var filepath = document.getElementById("newFile").files[0].name; var upload_path = "/ota/" + filepath; document.getElementById("viewFlashStart").innerHTML = "锁定页面,请务必保持WiFi在线,正在上传..."; document.getElementById("newFile").disabled = true; document.getElementById("otaStart").disabled = true; var file = document.getElementById("newFile").files[0]; var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function () { if (xhttp.readyState == 4) { if (xhttp.status == 200) { document.getElementById("viewFlashResult").innerHTML = "上传成功!"; } else if (xhttp.status == 0) { document.getElementById("viewFlashResult").innerHTML = "服务器断开!<br><br>请检查服务器是否在线,刷新页面后重新上传..."; } else { alert(xhttp.status + " Error!\n" + xhttp.responseText); } } }; let progressBar = document.getElementById("otaProgress"); xhttp.upload.onprogress = function (e) { var percentage = (event.loaded * 100.00) / (event.total * 1.00); percentage = percentage.toFixed(2); progressBar.value = Math.round(percentage); document.getElementById("otaPercent").value = percentage + "%"; } xhttp.open("POST", upload_path, true); xhttp.send(file); } } </script> </body> </html>