uniapp的h5端保存文件

本文介绍了如何在H5环境下,由于uni.saveFile不支持,通过安装并引入file-saver第三方库,实现文件的下载和本地保存,具体步骤包括安装file-saver、引入库以及利用uni.downloadFileAPI进行下载操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、因为h5端不支持uni.saveFile方法保存文件,要使用js的第三方库来进行保存文件

1、安装file-saver:在项目目录中运行命令 npm install file-saver --save 来安装file-saver库
2、引入file-saver:使用页面import { saveAs } from 'file-saver';引入file-saver库。

2、根据文件地址信息下载保存文件

		uni.downloadFile({
            url: fileUrl,//下载文件的地址
            success: (res) => {
              if (res.statusCode === 200) {
                /** 
                 *保存文件到本地
                 *res.tempFilePath:下载好文件的临时路径,用来保存
                 *this.uploadedFile.name:下载的文件名称
				 */       
                saveAs(res.tempFilePath,this.uploadedFile.name);
              }
            }
          });

准备好这些即可完成文件的下载和保存啦

### 实现 UniApp H5 页面中长按保存图片到相册 为了实现在 UniAppH5 页面中通过长按来触发保存图片至相册的功能,可以采用 JavaScript 结合 HTML5 来监听用户的触摸事件并判断其是否为长时间按下。一旦确认是长按动作,则执行相应的逻辑去处理图片下载。 对于 Android WebView 中无法响应图片长按事件的情况,在某些情况下可能是由于默认行为被阻止或者未正确配置手势识别所引起[^1]。因此建议先确保 WebView 设置允许触控反馈,并适当调整应用内的样式防止干扰正常交互流程。 考虑到不同平台间可能存在兼容性差异,下面给出一段适用于大多数现代浏览器环境下的解决方案: ```javascript // 定义一个函数用于监控指定类名下所有 img 元素的长按事件 function monitorLongPress(selector, callback) { const threshold = 800; // 设定阈值时间(ms),超过此数值即认为发生了长按 let startTime; document.querySelectorAll(selector).forEach((element) => { element.addEventListener('touchstart', (event) => { event.preventDefault(); // 取消默认点击效果 startTime = Date.now(); }); element.addEventListener('touchend', async (event) => { if (!startTime) return; if ((Date.now() - startTime) >= threshold) { try { await saveImageToGallery(event.target.src); callback && typeof callback === 'function' && callback(); } catch (error) { console.error(error.message || error); } } startTime = null; }); }); } async function saveImageToGallery(url){ // 创建隐藏 iframe 或者 a 标签模拟点击下载链接的方式实现跨域资源获取 var link=document.createElement("a"); link.href=url; link.download="image"; // 如果当前环境支持 Blob 对象则尝试创建 blob 并设置 href 属性指向该对象URL if(window.Blob&&window.URL){ fetch(url) .then(response=>response.blob()) .then(blob=>{ link.href=URL.createObjectURL(blob); link.click(); URL.revokeObjectURL(link.href); }) .catch(console.error); }else{ link.click(); } } ``` 上述代码片段展示了如何定义 `monitorLongPress` 函数以及辅助性的 `saveImageToGallery` 方法。前者负责绑定 touch 事件处理器以检测是否有符合条件的长按时长;后者则是具体实施保存操作的部分,它会根据传入的目标图像路径发起请求并将返回的数据流转换成可供本地存储的形式。 需要注意的是,实际开发过程中可能还需要考虑更多细节问题,比如权限管理、文件命名规则等。另外,如果目标设备的操作系统版本较新的话,可能会涉及到更复杂的 API 调用来完成这项工作,例如使用 [File System Access API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API)[^4] 进行更加精细控制。 最后提醒一点,当涉及敏感数据传输时务必遵循安全最佳实践指南,保障用户隐私不受侵犯的同时也要注意保护应用程序本身免受恶意攻击的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸葛博仌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值