小程序文件保存全解析:从沙箱原理到实战避坑指南
1. 从“保存”这个动作说起为什么小程序里这么麻烦做前端开发的朋友尤其是从传统Web端转过来的第一次在小程序里实现“保存文件到本地”这个功能时大概率会懵一下。在浏览器里我们可能习惯性地想到URL.createObjectURL()配合a标签的download属性或者直接用FileSaver.js这样的库一个点击事件文件就下载到用户的“下载”文件夹了。但在微信小程序里这条路走不通。这背后的核心原因在于小程序的安全沙箱模型。小程序运行在一个封闭的 JavaScriptCore 环境中它没有传统浏览器中完整的DOM和BOMAPI更没有直接访问用户文件系统的权限。所有涉及到本地文件的操作都必须通过微信客户端这个“中间人”来代理完成。微信为了平衡功能与安全以及平台自身的生态管控提供了一套自己的文件系统 API。所以在小程序里谈“保存文件到本地”本质上是在和微信提供的这套文件系统 API 打交道目标是将网络资源或临时文件持久化存储到小程序特定的用户目录下。那么用户最终在哪里能找到这个文件呢这里就引出了小程序文件系统的一个关键概念用户文件目录。这个目录对于每个用户、每个小程序都是独立的路径通常像wxfile://usr/小程序appid/这样。用户在小程序内保存的文件默认就放在这里。它不像手机系统的“下载”或“文档”文件夹那样有全局统一的入口用户需要通过小程序的特定页面比如一个“我的文件”列表来访问或者通过调用微信的“保存到手机相册/存储”接口将文件从小程序沙箱“搬运”到手机系统的公共存储区域。理解了这些背景我们再来看具体的实现方式。根据文件来源的不同主要有两条技术路径一是处理网络文件如图片、PDF二是处理由小程序自身生成的文件如Canvas绘图、录音文件。接下来我就结合自己趟过的坑详细拆解这两种方式的核心API、步骤和那些官方文档里不会写的细节。2. 路径一下载网络文件并保存这是最常见、最刚需的场景。用户在小程序里看到一张精美的海报图或者一份重要的PDF文档点击“保存”按钮期望它能存到手机里。这个过程可以清晰地分为两步下载和保存。2.1 第一步使用 wx.downloadFile 下载你不能直接用wx.saveFile去保存一个网络URL必须先用wx.downloadFile将网络资源下载到小程序的临时文件路径。wx.downloadFile({ url: https://example.com/path/to/your/file.pdf, // 网络文件地址 success: (res) { if (res.statusCode 200) { // res.tempFilePath 就是下载后得到的临时文件路径 console.log(临时文件路径, res.tempFilePath); // 接下来可以调用 saveFile } else { wx.showToast({ title: 下载失败, icon: none }); } }, fail: (err) { console.error(下载文件失败, err); wx.showToast({ title: 网络错误, icon: none }); } })这里有几个必须注意的坑域名白名单url必须在微信公众平台配置的下载合法域名列表中。没配置的话开发工具里可能会报错“不在以下 downloadFile 合法域名列表中”。这是小程序网络请求的基本安全策略。临时文件路径下载成功得到的res.tempFilePath是一个以wxfile://开头的临时路径。这个文件不会永久存储在小程序本次运行期间可能被清理。所以你必须尽快处理它比如调用wx.saveFile持久化。文件大小限制小程序对wx.downloadFile有默认的大小限制。早期版本是10MB后来有所调整但依然存在。如果文件过大需要考虑分片下载或提示用户。超限会触发fail回调。2.2 第二步使用 wx.saveFile 持久化拿到临时文件路径后就可以调用wx.saveFile将其保存到小程序的用户文件目录得到一个本地缓存文件路径。// 接上面的 success 回调 wx.saveFile({ tempFilePath: res.tempFilePath, // 传入下载得到的临时路径 success: (saveRes) { // saveRes.savedFilePath 是持久化后的本地文件路径 console.log(文件已保存至, saveRes.savedFilePath); wx.showToast({ title: 保存成功 }); // 可以在这里将 savedFilePath 存储到本地缓存方便后续使用 wx.setStorageSync(mySavedFilePath, saveRes.savedFilePath); }, fail: (saveErr) { console.error(保存文件失败, saveErr); wx.showToast({ title: 保存失败, icon: none }); } })成功保存后这个文件就会长期存在于该用户的小程序存储空间中除非用户主动清理小程序缓存或者开发者调用wx.removeSavedFile删除它。但是这里有一个巨大的认知误区wx.saveFile保存后的文件用户并不能在手机的“文件管理”App里直接找到它仍然被封闭在小程序的沙箱内。如果你的需求是让用户能把图片保存到系统相册或者把文档保存到手机存储的任意位置比如“下载”文件夹那么仅仅走到wx.saveFile这一步是远远不够的。这就需要用到我们下面要说的“保存到系统存储”能力。3. 路径二将文件保存到系统存储相册/手机这是真正实现“保存到本地”用户体验的关键一步。微信提供了wx.saveImageToPhotosAlbum保存图片到相册和wx.saveVideoToPhotosAlbum保存视频到相册这两个API。对于其他类型的文件如PDF、Word在基础库2.19.0版本之后可以使用更通用的wx.saveFileToDisk。但请注意wx.saveFileToDisk目前仍处于逐步灰度开放中并非所有用户都能使用。3.1 保存图片到手机相册这是最成熟、最稳定的方案。前提是你有一个图片文件的临时路径可能来自wx.chooseImage、wx.downloadFile或canvas导出。wx.saveImageToPhotosAlbum({ filePath: tempImagePath, // 图片的临时文件路径 success: () { wx.showToast({ title: 已保存到相册 }); }, fail: (err) { console.error(err); // 这里失败的原因需要仔细处理 if (err.errMsg.includes(auth deny)) { // 用户拒绝了相册权限需要引导用户去设置页打开 wx.showModal({ title: 提示, content: 需要您授权保存到相册, success: (modalRes) { if (modalRes.confirm) { wx.openSetting(); // 打开设置页面 } } }); } else { wx.showToast({ title: 保存失败, icon: none }); } } })核心注意事项用户授权这是最大的一个坑。从某个版本开始saveImageToPhotosAlbum需要用户授权相册的“写入”权限。如果用户之前拒绝过再次调用会直接失败。必须在fail回调里判断错误信息如果是权限问题需要优雅地引导用户手动打开设置。粗暴地反复调用API是没用的。文件路径有效性filePath必须是一个确切的、可访问的图片文件临时路径。如果你传了一个wx.saveFile得到的持久化路径wxfile://usr/...这个API是无法识别的会报错。通常来自wx.chooseImage、wx.downloadFile或canvasToTempFilePath的临时路径是有效的。安卓/iOS差异在部分安卓机型上保存成功后相册可能不会立即刷新需要等待几秒或重启相册App才能看到。可以提示用户“保存成功请稍后到相册中查看”。3.2 保存文件到手机磁盘通用方案对于非图片/视频的文件或者希望用户能像下载一样将文件存到“下载”目录可以使用wx.saveFileToDisk。它的行为更接近浏览器中的“下载”。// 首先需要先下载或生成文件获得临时路径 wx.downloadFile({ url: https://example.com/doc.pdf, success: (dlRes) { wx.saveFileToDisk({ filePath: dlRes.tempFilePath, success: () { wx.showToast({ title: 文件已保存 }); }, fail: (err) { console.error(保存到磁盘失败, err); // 处理错误可能包括无权限、文件类型不支持、API不可用等 wx.showToast({ title: 保存失败, icon: none }); } }) } })使用这个API前你必须清楚以下几点可用性检查这是一个较新的API且可能受灰度发布控制。在调用前强烈建议用wx.canIUse(saveFileToDisk)判断是否可用。如果不可用必须有降级方案比如提示用户升级微信版本或者引导用户通过其他方式如邮件发送给自己。文件路径同样它需要一个有效的临时文件路径。用户感知调用成功后微信客户端会接管后续流程。在iOS上通常会弹出系统的“文件”App让用户选择存储位置在安卓上可能会直接保存到默认的下载目录并弹出通知。开发者无法控制具体的存储路径。权限与限制它同样可能涉及存储权限。此外微信可能会对可保存的文件类型、大小有一定限制。4. 实战中的高阶场景与避坑指南掌握了两种基本路径后我们来看几个更复杂的真实场景这些地方最容易出问题。4.1 场景保存Canvas绘制的内容生成分享图、海报是小程序的常见功能。我们通常用Canvas绘制然后导出图片保存。// 1. 绘制Canvas... // 假设 canvasId 为 myCanvas const query wx.createSelectorQuery(); query.select(#myCanvas).fields({ node: true, size: true }).exec((res) { const canvas res[0].node; // 2. 将 Canvas 转换为临时图片文件 wx.canvasToTempFilePath({ canvas: canvas, success: (res) { const tempFilePath res.tempFilePath; // 3. 保存到相册 wx.saveImageToPhotosAlbum({ filePath: tempFilePath, success: () { /* ... */ }, fail: (err) { /* ... */ } }); }, fail: (err) { console.error(Canvas转换失败, err); } }); });避坑要点异步渲染Canvas绘制是异步的确保所有绘制命令都执行完毕后再调用wx.canvasToTempFilePath。可以在draw回调或使用setTimeout稍作延迟。Canvas尺寸与清晰度canvasToTempFilePath默认使用Canvas的显示尺寸CSS像素在高DPI屏幕上可能会模糊。可以通过destWidth和destHeight参数指定更高的输出分辨率物理像素例如设置为Canvas实际宽高的2倍或3倍以获得高清图。iOS兼容性在部分iOS版本上如果Canvas内容包含网络图片需要确保图片已加载完成否则导出的图片可能是空白或残缺的。可以使用drawImage的complete回调来确保。4.2 场景处理大文件与进度提示当文件较大时直接操作会让用户感觉“卡死”体验很差。我们需要给用户进度反馈。对于wx.downloadFile它支持监听下载进度const downloadTask wx.downloadFile({ url: https://example.com/large-video.mp4, success: (res) { /* ... */ }, fail: (err) { /* ... */ } }); // 监听下载进度 downloadTask.onProgressUpdate((res) { console.log(下载进度${res.progress}%); console.log(已下载${res.totalBytesWritten} / ${res.totalBytesExpectedToWrite}); // 可以在这里更新UI进度条 this.setData({ downloadProgress: res.progress }); });注意wx.saveFile和wx.saveImageToPhotosAlbum没有提供进度回调。对于保存大文件只能通过UI文案如“正在处理请稍候...”来缓解用户的等待焦虑。一个实用的技巧是在调用保存API前显示一个“加载中”的模态框在success或fail回调中再关闭它。4.3 场景文件管理查看、删除已保存的文件用户保存了文件我们可能需要提供一个列表让用户查看和管理。这里就需要用到wx.getSavedFileList和wx.removeSavedFile。// 获取本地已保存的所有文件列表 wx.getSavedFileList({ success: (res) { const fileList res.fileList; console.log(已保存文件列表, fileList); // fileList 是一个数组包含 filePath, size, createTime 等信息 // 可以用这些信息渲染一个文件列表UI } }); // 删除某个已保存的文件 wx.removeSavedFile({ filePath: 需要删除的文件路径, success: () { console.log(删除成功); // 更新UI列表 } });重要提醒这里wx.getSavedFileList获取到的是通过wx.saveFile保存的文件也就是存储在小程序沙箱用户目录下的文件。它无法获取到通过wx.saveImageToPhotosAlbum或wx.saveFileToDisk保存到系统存储的文件。这两者的管理权限是完全分离的。5. 权限申请的最佳实践与用户体验如前所述保存到相册或磁盘涉及用户权限。糟糕的权限申请逻辑是导致功能失败和用户投诉的主要原因。下面是我总结的一套相对稳健的流程。5.1 预检与引导不要一上来就调用保存API。对于需要相册权限的操作可以先使用wx.getSetting检查用户是否已经授权。// 在点击保存按钮的入口函数里 wx.getSetting({ withSubscriptions: false, success: (res) { const photosAlbumAuth res.authSetting[scope.writePhotosAlbum]; if (photosAlbumAuth undefined) { // 从未询问过直接调用API会弹出授权窗口 this.doSaveImage(); } else if (photosAlbumAuth false) { // 用户之前拒绝了需要引导去设置页打开 this.showAuthGuideModal(); } else { // 用户已经授权直接执行保存 this.doSaveImage(); } } });5.2 优雅的授权拒绝处理当wx.saveImageToPhotosAlbum因权限失败时弹窗引导的文案非常重要。showAuthGuideModal() { wx.showModal({ title: 保存图片需要您的授权, content: 您之前拒绝了保存到相册的权限。如需保存请点击“去设置”打开权限。, confirmText: 去设置, cancelText: 取消, success: (res) { if (res.confirm) { // 打开小程序设置页面只能跳到设置页无法精准跳转权限开关 wx.openSetting(); } } }); }这里有一个无奈的现实wx.openSetting()会打开小程序的整体设置页面用户需要自己找到“相册”权限并打开。我们无法直接跳转到具体的权限开关。因此引导文案必须清晰明确。5.3 针对saveFileToDisk的降级方案由于这个API的可用性不确定必须准备降级方案。handleSaveFile() { if (wx.canIUse(saveFileToDisk)) { // 使用新API this.saveFileToDisk(); } else { // 降级方案 wx.showModal({ title: 提示, content: 您的微信版本较低无法直接保存文件。建议您先下载文件然后通过其他方式保存。, showCancel: false, success: () { // 方案1: 提示用户长按图片保存如果是图片 // 方案2: 将文件临时路径显示在一个新页面用户可能需要截图或使用其他工具 // 方案3: 调用 wx.saveFile 存到小程序本地然后提供“发送给朋友”等功能 this.showAlternativeOptions(); } }); } }6. 两种方式的本质对比与选型建议让我们从原理上再梳理一下这两种“保存”方式的根本区别这决定了你该如何选择。方式Awx.downloadFilewx.saveFile目标位置小程序沙箱内的用户文件目录 (wxfile://usr/...)。文件可见性仅限本小程序内可见。用户无法在手机系统文件管理器或相册中直接找到。管理方式可通过小程序API (getSavedFileList,removeSavedFile) 管理。适用场景小程序内部需要缓存并重复使用的文件。例如离线阅读的电子书、游戏资源包、用户编辑的草稿等。目的是“缓存”而非“导出给用户”。方式Bwx.saveImageToPhotosAlbum/wx.saveFileToDisk目标位置手机系统的公共存储区域相册、下载目录等。文件可见性全局可见。用户可以在系统相册、文件管理App中找到。管理方式由用户通过系统应用管理小程序无法再控制。适用场景用户明确希望将内容保存到手机本地以便在其他地方使用。例如保存海报图片用于分享朋友圈、保存PDF合同用于打印、保存视频用于剪辑。目的是“导出”。选型决策流问自己用户保存这个文件的最终目的是什么是只在你的小程序里再次打开还是要在手机其他地方使用如果答案是“只在小程序内使用”选方式A。它更可靠无需授权且便于你管理。如果答案是“要在手机其他地方使用”选方式B。这是用户理解的“保存到本地”。对于图片/视频优先使用saveImageToPhotosAlbum它最成熟。对于其他文档尝试使用saveFileToDisk但务必做好可用性检测和降级处理。7. 一个完整的、健壮的保存图片示例最后我将整合上面所有的知识点给出一个从Canvas生成到保存到用户相册的、包含完整错误处理和用户引导的示例代码。这个流程我曾在多个项目中复用稳定性很高。// Page.js Page({ data: { canvasHidden: false, authModalVisible: false, }, // 用户点击“生成并保存”按钮 onTapSave() { this.checkAndSave(); }, // 1. 权限检查与主流程 async checkAndSave() { // 检查相册授权状态 const setting await this.getSettingPromise(); const auth setting.authSetting[scope.writePhotosAlbum]; if (auth undefined) { // 首次询问直接走流程系统会弹窗 this.generateAndSaveImage(); } else if (auth false) { // 之前被拒绝显示引导弹窗 this.setData({ authModalVisible: true }); } else { // 已授权直接执行 this.generateAndSaveImage(); } }, // 封装 wx.getSetting 为 Promise getSettingPromise() { return new Promise((resolve) { wx.getSetting({ withSubscriptions: false, success: resolve, fail: () resolve({}) // 容错处理 }); }); }, // 2. 生成图片并保存 async generateAndSaveImage() { wx.showLoading({ title: 生成中..., mask: true }); try { // 步骤1: 绘制Canvas (这里省略具体绘制代码) // await this.drawCanvas(); // 步骤2: Canvas转临时图片 const tempFilePath await this.canvasToTempFile(); if (!tempFilePath) throw new Error(生成图片失败); // 步骤3: 保存到相册 await this.saveToPhotosAlbum(tempFilePath); wx.showToast({ title: 已保存到相册, icon: success }); } catch (error) { console.error(保存全过程失败:, error); wx.showToast({ title: error.errMsg || 保存失败请重试, icon: none, duration: 3000 }); } finally { wx.hideLoading(); } }, // Canvas转图片 canvasToTempFile() { return new Promise((resolve, reject) { setTimeout(() { // 确保Canvas绘制完成 wx.canvasToTempFilePath({ canvasId: posterCanvas, destWidth: 750, // 设置高清输出 destHeight: 1334, success: (res) resolve(res.tempFilePath), fail: reject }, this); }, 300); }); }, // 保存到相册 saveToPhotosAlbum(filePath) { return new Promise((resolve, reject) { wx.saveImageToPhotosAlbum({ filePath: filePath, success: resolve, fail: (err) { // 专门处理权限拒绝错误 if (err.errMsg.includes(auth deny)) { reject(new Error(权限不足请在设置中打开相册权限)); this.setData({ authModalVisible: true }); // 显示引导弹窗 } else { reject(err); } } }); }); }, // 3. 用户点击引导弹窗的“去设置” goToSetting() { this.setData({ authModalVisible: false }); wx.openSetting(); }, // 用户取消授权引导 cancelAuth() { this.setData({ authModalVisible: false }); wx.showToast({ title: 已取消, icon: none }); }, });对应的WXML部分!-- 授权引导弹窗 -- view wx:if{{authModalVisible}} classauth-modal-mask view classauth-modal view classauth-title需要相册权限/view view classauth-content保存图片需要您授权访问相册。请点击下方按钮前往设置打开权限。/view view classauth-buttons button classauth-btn cancel bindtapcancelAuth取消/button button classauth-btn confirm open-typeopenSetting bindtapgoToSetting去设置/button /view /view /view !-- 画布 -- canvas wx:if{{!canvasHidden}} canvas-idposterCanvas idposterCanvas stylewidth:375px; height:667px; /canvas !-- 保存按钮 -- button bindtaponTapSave保存海报到相册/button这个示例涵盖了从权限预检、Canvas生成、错误处理到用户引导的完整闭环。关键在于将异步操作Promise化使流程更清晰并对saveImageToPhotosAlbum的特定错误进行精准捕获和引导。在实际项目中你还需要根据UI设计调整样式并根据具体业务补充Canvas的绘制逻辑。保存文件这个功能看似简单但涉及到网络、本地存储、用户权限、系统交互等多个环节任何一个细节考虑不周都可能导致功能失效或用户体验受损。我的经验是永远不要假设API调用一定会成功每一个回调里的fail分支都必须认真对待给用户明确、友好的反馈。尤其是在权限问题上粗暴的“保存失败”提示会让用户一头雾水而清晰的引导则能大大提升功能的可用性和用户好感度。

相关新闻

PDF题库转VCE格式全攻略:基于Python与OCR的自动化实践

PDF题库转VCE格式全攻略:基于Python与OCR的自动化实践

1. 项目概述:从PDF到VCE,一场备考效率的革命 如果你正在备考思科认证网络工程师(CCNA),或者任何类似的IT认证考试,那你一定对“题库”这两个字又爱又恨。爱的是,它是通往认证大门最直接的路径&a…

2026/8/1 10:09:41 阅读更多 →
Unity VR人体、眼部、面部追踪免费方案:从MediaPipe到完整实现

Unity VR人体、眼部、面部追踪免费方案:从MediaPipe到完整实现

1. 项目概述:为什么VR追踪是沉浸感的基石 在虚拟现实(VR)开发中,我们常常谈论“沉浸感”。但沉浸感不是凭空而来的,它依赖于一系列底层技术将用户的物理存在精确地映射到虚拟世界中。其中,人体、眼部和面部…

2026/8/1 10:09:41 阅读更多 →
C++运算符重载深度解析:从成员函数到全局函数的实现与选择

C++运算符重载深度解析:从成员函数到全局函数的实现与选择

1. 项目概述:为什么运算符重载是C的“语法糖”与“双刃剑” 刚接触C的朋友,第一次看到“运算符重载”这个词,可能会觉得既神秘又高级。其实,它离我们很近。想象一下,你用 std::string 时,可以直接用 把…

2026/8/1 10:09:41 阅读更多 →

最新新闻

抖音直播数据采集技术深度解析:WebSocket协议与加密签名逆向工程实践

抖音直播数据采集技术深度解析:WebSocket协议与加密签名逆向工程实践

抖音直播数据采集技术深度解析:WebSocket协议与加密签名逆向工程实践 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2025最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 在当…

2026/8/1 10:54:55 阅读更多 →
Raspberry Pi Pico 2 W物联网开发实战:从硬件解析到低功耗应用

Raspberry Pi Pico 2 W物联网开发实战:从硬件解析到低功耗应用

1. 项目概述:Raspberry Pi Pico 2 W,一个更“聪明”的微控制器如果你玩过树莓派Pico,或者听说过它的大名,那你一定知道它是一款以性价比和易用性著称的微控制器。它让无数创客、学生和工程师能够轻松地进入嵌入式开发的世界。现在…

2026/8/1 10:54:55 阅读更多 →
网盘直链下载助手:告别客户端束缚,浏览器一键获取九大网盘真实下载链接

网盘直链下载助手:告别客户端束缚,浏览器一键获取九大网盘真实下载链接

网盘直链下载助手:告别客户端束缚,浏览器一键获取九大网盘真实下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里…

2026/8/1 10:54:55 阅读更多 →
14英寸2160x1440 LCD驱动实战:接口选型、问题排查与系统集成指南

14英寸2160x1440 LCD驱动实战:接口选型、问题排查与系统集成指南

1. 项目缘起:为什么是14英寸的2160x1440 LCD?最近在折腾一个嵌入式显示项目,选屏幕时,我绕开了常见的1080p和4K,最终锁定了一块14英寸、分辨率2160x1440的LCD面板。这个选择可能让不少人感到意外:它既不是标…

2026/8/1 10:54:55 阅读更多 →
基于树莓派DIY智能魔镜:从硬件选型到软件配置全攻略

基于树莓派DIY智能魔镜:从硬件选型到软件配置全攻略

1. 项目概述:一面会“思考”的智能镜子几年前,我第一次在科技展上看到“Magic Mirror”(智能魔镜)的概念,就被它深深吸引了。它看起来就是一面普通的镜子,但当屏幕亮起,天气、新闻、日程甚至你的…

2026/8/1 10:54:55 阅读更多 →
如何快速部署大麦网抢票神器:面向初学者的完整自动化工具指南

如何快速部署大麦网抢票神器:面向初学者的完整自动化工具指南

如何快速部署大麦网抢票神器:面向初学者的完整自动化工具指南 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到心仪演唱会门票而烦恼吗?面对秒光的热门演出和高…

2026/8/1 10:53:55 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →