下载:全盘文件扫描,用开源代码更安全吗?

AI 新资讯21小时前发布
793 0 0
熊猫办公
声明:以下内容为技术实验内容,请谨慎使用,主要供关于自主可控的探讨,建议代码不熟悉的老师使用个人非重要电脑实验,谨慎操作!本号不负担实验后果。
问题来源:有老师反馈从本号下载的很多资源有._文件,大都是4K等固定大小的文件。 可见,问题总是来源于真实实践,并不一定是主题引发。
解决方式1:使用的时候,在WIndows下开开隐藏文件设置,选中._XXX.YYY格式的文件删除即可。
解决方式2:从下面的“阅读原文”,在线处理,即可指定盘符,注意选“文件开头”项,搜索,扫描全盘可行部分或全部删除。
扫描后的功能:扫描到图片,可预览;声音、视频可播放。复制当前路径(html静态网页不可打开文件夹)。 选中文件可以压缩、解压、下载。详见“说明”。
技术难点:如果只是用静态网页,对磁盘及文件权限的授权,当前文件的定位等都是难题,即使在AI加持下,也需要多次实验,想不少的策略来应对。不然,AI也是偷懒的。所以,人与AI协同,并非纸上谈兵可行。
本程序我在AI协同下前前后后用了五六种方案,历时总计6个多小时,试想真正的项目学习容易吗? 不信,你在线用一下,自己用AI生成试一试。如果不参考以下图片或代码,也不一定很顺利完成的.
自主可控:虽然,我提供的是静态网页工具,并不上传用户信息与资源,但是我们要不要想了解这一层呢?
为避免算法黑箱,就要懂点代码,或者将代码交由让AI分析也是可以的~
在线应用使用举例:(可从阅读原文进入)

https://wasbxg.yunmind.cn/bxg-files/

(1)扫描图片,可查看、可打包、可以下载。
下载:全盘文件扫描,用开源代码更安全吗?
下载:全盘文件扫描,用开源代码更安全吗?
(2)扫描mp3,可播放试听。
下载:全盘文件扫描,用开源代码更安全吗?
【开源&自主可控】:复制以下两段代码,保存为相应的文件。也可以从网盘下载 ,以下提供完整代码以进行观察安全性。
(1)下面代码可保存为“文件扫描.html”,作为界面规划 。

百香果AI山海 · 文件扫描器 * {margin:0;padding:0;box-sizing: border-box; } body{font-family: system-ui, -apple-system, sans-serif;background:linear-gradient(135deg,#667eea,#764ba2);min-height:100vh;padding:20px; } .container{max-width:1400px;margin:0auto; } .card{background:rgba(255,255,255,0.95);border-radius:28px;padding:24px;margin-bottom:20px; } h1{color:#1e4a5f;margin-bottom:8px;font-size:1.6rem; } .subtitle{color:#7c6a9e;font-size:0.85rem;margin-bottom:20px; } .row{display: flex;flex-wrap: wrap;gap:12px;align-items: flex-end;margin-bottom:16px; } .field{flex:1;min-width:130px; } .fieldlabel{font-size:0.7rem;font-weight:600;color:#5a4e7a;display: block;margin-bottom:4px; } .fieldinput,.fieldselect{width:100%;padding:10px14px;border:2pxsolid#e2e0f0;border-radius:20px;background: white; } button{background:linear-gradient(120deg,#667eea,#764ba2);border: none;color: white;padding:10px20px;border-radius:40px;font-weight:600;cursor: pointer; } button:hover{transform:translateY(-2px); } .btn-gray{background:#5e6472; } .stats{background:#f2effc;display: inline-block;padding:5px14px;border-radius:30px;font-size:0.8rem;color:#4a3b6e;margin-top:12px; } .progress-area{background:#f1f0fe;border-radius:24px;padding:12px18px;margin-top:16px;display: none; } .progress-bar{background:#ddd9f0;border-radius:40px;height:8px;margin:8px0; } .progress-fill{width:0%;height:100%;background:linear-gradient(90deg,#667eea,#b77cf0);border-radius:40px;transition: width0.2s; } .toolbar{background:rgba(255,255,255,0.96);border-radius:60px;padding:10px20px;margin-bottom:20px;display: flex;flex-wrap: wrap;gap:12px;align-items: center; } .toolbarbutton{background:#f0f2ff;color:#4a3b6e;padding:8px16px; } .toolbarbutton:disabled{opacity:0.5;cursor: not-allowed; } .btn-danger{background:#ffe5e5!important;color:#c2410c!important; } .file-table{background: white;border-radius:28px;overflow-x: auto; } .file-header{display: grid;grid-template-columns:40px1fr100px140px160px;gap:12px;padding:14px20px;background:#f8f7ff;font-weight:700;border-bottom:1pxsolid#e9e6f5; } .file-row{display: grid;grid-template-columns:40px1fr100px140px160px;gap:12px;padding:12px20px;align-items: center;border-bottom:1pxsolid#edeef5; } .file-row:hover{background:#faf8ff; } .selected-row{background:#f0edfe; } .thumb-img{width:40px;height:40px;border-radius:10px;object-fit: cover;cursor: pointer;border:1pxsolid#ddd; } .file-icon{font-size:28px; } .file-name-text{font-weight:500;word-break: break-word; } .file-path{font-size:0.7rem;color:#8a7aa9;margin-top:2px; } .action-btns{display: flex;gap:6px;flex-wrap: wrap; } .action-btnsbutton{background:#f3f2fc;padding:4px10px;font-size:0.7rem;color:#2d2b4b;cursor: pointer; } .action-btnsbutton:hover{background:#e0ddf5; } .empty{text-align: center;padding:60px20px;color:#8f8db0; } .toast{position: fixed;bottom:20px;right:20px;background:#2c3e66;color: white;padding:10px20px;border-radius:40px;z-index:9999;animation: fadeIn0.2s; } @keyframesfadeIn {from{opacity:0;transform:translateY(20px); }to{opacity:1;transform:translateY(0); } } .modal{position: fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.6);display: flex;align-items: center;justify-content: center;z-index:10000; } .modal-content{background: white;border-radius:28px;padding:24px;width:90%;max-width:400px; } .preview-overlay{position: fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.9);display: flex;align-items: center;justify-content: center;z-index:10001;cursor: pointer; } .preview-img{max-width:90vw;max-height:90vh;border-radius:16px; } @media(max-width:700px) { .file-header,.file-row{grid-template-columns:35px1fr70px100px130px;gap:8px;font-size:0.75rem; } }

🌿 百香果AI山海 · 文件扫描器

扫描本地文件夹 | 图片/音视频预览 | 下载/删除/压缩ZIP | 打开文件位置

C:\D:\E:\F:\G:\H:\I:\J:\K:\L:\

任意位置开头结尾

📂 选择文件夹 ✨ 开始检索 🔄 重新全面扫描 ⏹ 停止 📖 说明

⚡ 请先选择文件夹,然后点击「开始检索」

扫描中...0%

📄 文件:0📁 遍历:0

🗑 批量删除 📦 压缩选中 📂 解压ZIP ⬇️ 下载选中

文件名 / 路径大小修改时间操作

✨ 请先选择文件夹,然后点击「开始检索」

📘 百香果文件扫描器 - 使用说明

🔧 基础操作
1. 📁选择文件夹:点击「选择文件夹」按钮,选择要扫描的文件夹并授权
2. 💽选择盘符:选择文件所在的磁盘驱动器(C:\、D:\、E:\等)
3. ✏️输入目录路径:在目录输入框中输入路径(不含盘符,含父目录)
• 例如:zhiliankongjian\202511openAIform
4. 🔍关键词过滤:输入关键词筛选文件,支持三种匹配模式:
• 任意位置:文件名中包含关键词
• 开头:文件名以关键词开头
• 结尾:文件名以关键词结尾
5. ✨开始检索:首次点击开始扫描;后续点击从缓存快速检索
6. 🔄重新全面扫描:扫描完成后显示,强制重新扫描整个目录
7. ⏹停止:扫描过程中可随时中断扫描

⚡ 缓存机制
• 首次扫描后,结果会自动缓存
• 再次点击「开始检索」时,直接从缓存快速过滤,无需重新扫描
• 切换文件夹时自动清空缓存
• 如需检测新文件,点击「重新全面扫描」

📋 文件操作
8. 🖼️图片预览:点击图片缩略图可全屏预览
9. 🎧音频播放:点击「播放」按钮在线播放音频文件(mp3、wav等)
10. 🎥视频播放:点击「播放」按钮在新窗口播放视频
11. 📂打开文件位置:复制文件所在文件夹的完整路径到剪贴板
• 路径格式:盘符 + 目录 + 文件相对路径(不含文件名)
12. ⬇️下载:下载单个文件到本地
13. 🗑️删除:删除单个文件(不可恢复,请谨慎操作)

📦 批量操作
14. ☑️批量选择:勾选文件前的复选框,或点击「全选」选中所有文件
15. 📦压缩选中:将选中文件打包为ZIP压缩包下载
16. 📂解压ZIP:选中单个ZIP文件,解压后打包下载
17. ⬇️下载选中:下载单个选中的文件
18. 🗑️批量删除:批量删除选中的所有文件(不可恢复)

⚠️ 注意事项
• 删除操作不可恢复,请务必确认后再执行
• 建议使用 Chrome/Edge 86+ 浏览器以获得最佳体验
• 默认关键词为 "._",用于匹配 macOS 隐藏文件
• 缓存仅在当前会话有效,刷新页面后需重新扫描
• 复制路径时会自动去除文件名,只保留目录路径

关闭

📦 压缩文件

取消确认

(2)下面代码可保存为“app.js”,作为事件脚本。

// DOM 元素constfolderPathInput =document.getElementById('folderPath');constrescanBtn =document.getElementById('rescanBtn');constkeywordInput =document.getElementById('keyword');constmatchTypeSelect =document.getElementById('matchType');constselectFolderBtn =document.getElementById('selectFolderBtn');constscanBtn =document.getElementById('scanBtn');conststopScanBtn =document.getElementById('stopScanBtn');consthelpBtn =document.getElementById('helpBtn');constcloseHelpBtn =document.getElementById('closeHelpBtn');constbatchDeleteBtn =document.getElementById('batchDeleteBtn');constbatchZipBtn =document.getElementById('batchZipBtn');constextractZipBtn =document.getElementById('extractZipBtn');constdownloadOneBtn =document.getElementById('downloadOneBtn');constselectAllCheck =document.getElementById('selectAllCheck');constfileListDiv =document.getElementById('fileList');conststatsMsg =document.getElementById('statsMsg');constprogressBox =document.getElementById('progressBox');constprogressFill =document.getElementById('progressFill');constprogressStatus =document.getElementById('progressStatus');constprogressPercent =document.getElementById('progressPercent');constfileCountSpan =document.getElementById('fileCount');constitemCountSpan =document.getElementById('itemCount');// 状态变量letdirHandle =null;letallFiles = [];letcurrentFiles = [];letselectedSet =newSet();letisScanning =false;letstopFlag =false;lettotalItems =0;letfoundFiles =0;// 存储根目录名称用于路径构建letrootDirName ='';functionshowToast(msg, isError) { consttoast =document.createElement('div'); toast.className='toast'; toast.style.background= isError ?'#dc3545':'#2c3e66'; toast.innerText= msg; document.body.appendChild(toast); setTimeout(() =>toast.remove(),2500);}functionformatSize(bytes) { if(!bytes)return'0 B'; constk =1024; constsizes = ['B','KB','MB','GB']; consti =Math.floor(Math.log(bytes) /Math.log(k)); returnparseFloat((bytes /Math.pow(k, i)).toFixed(1)) +' '+ sizes[i];}functionformatDate(ts) { returnts ?newDate(ts).toLocaleString() :'-';}functionescapeHtml(str) { if(!str)return''; returnstr.replace(/[&]/g,function(m) { if(m ==='&')return'&'; if(m ==='<')return'<'; if(m ==='>')return'>'; returnm; });}functionupdateToolbar() { constcnt = selectedSet.size; batchDeleteBtn.disabled= cnt ===0; batchZipBtn.disabled= cnt ===0; extractZipBtn.disabled= cnt !==1; downloadOneBtn.disabled= cnt !==1;}// 打开文件所在位置 - 复制文件当前的完整路径// 打开文件所在位置 - 复制完整路径(盘符 + 目录 + 文件位置,不含文件名)asyncfunctionopenFileLocation(filePath, fileName) { // 获取用户选择的盘符和输入的目录 constdrive = driveSelect.value.replace(/\/*$/,'\'); constdirPath = folderPathInput.value.trim(); // 验证路径 if(!drive) { showToast('请选择盘符',true); return; } if(!dirPath) { showToast('请输入目录路径',true); return; } // 构建基础路径(盘符 + 目录) constbasePath = drive + dirPath.replace(/\/*$/,'\'); // 去掉文件名,只保留文件夹路径 constpathParts = filePath.split('/'); pathParts.pop();// 移除最后一部分(文件名) constfolderPath = pathParts.join('\'); // 构建完整路径(盘符 + 目录 + 文件所在文件夹) constfullPath = folderPath ? basePath + folderPath : drive + dirPath; awaitnavigator.clipboard.writeText(fullPath); showToast('📂 路径已复制: '+ fullPath); showToast('💡 提示:按 Win+E 打开资源管理器,粘贴路径到地址栏');}// 图片预览functionshowImagePreview(url) { constoverlay =document.createElement('div'); overlay.className='preview-overlay'; overlay.innerHTML='✕下载:全盘文件扫描,用开源代码更安全吗?'; document.body.appendChild(overlay); overlay.onclick=() =>overlay.remove();}// 音频播放器functionshowAudioPlayer(file, name) { consturl =URL.createObjectURL(file.nativeFile); constpanel =document.createElement('div'); panel.style.cssText='position:fixed; bottom:20px; left:20px; background:#1e1e2f; color:white; padding:16px; border-radius:28px; z-index:10000; width:320px; box-shadow:0 4px 20px rgba(0,0,0,0.3);'; panel.innerHTML='

🎵 '+escapeHtml(name) +'

'+ ' ''+ '您的浏览器不支持音频播放'+ ''+ ''; document.body.appendChild(panel); panel.querySelector('.closeAudio').onclick=() =>{ panel.remove(); URL.revokeObjectURL(url); };}// 视频播放器functionshowVideoPlayer(file, name) { consturl =URL.createObjectURL(file.nativeFile); constwin =window.open(); win.document.write(''+escapeHtml(name) +''+ 'body{margin:0;background:#000;display:flex;justify-content:center;align-items:center;min-height:100vh;}'+ ''+ ' ''+ '您的浏览器不支持视频播放'+ ''+ '

© 版权声明

相关文章