关于uniapp在h5端无法保存视频的问题

该文章介绍了一个基础类库,用于处理文件下载和图片保存功能。在H5环境下,它使用`saveFile`方法模拟点击下载,并提供`download`函数下载文件。在非H5环境下,如uni-app,它利用`saveImageToPhotosAlbum`保存图片到相册。类库还包含一个长按图片触发的`operator`函数,用于保存图片。

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

先封装一个基础类库

import $common from '@/common/common.js';
export default {
	saveFile: function(url, success) {
	    const dA = document.createElement("a");
	    dA.download = ''; // 设置下载的文件名,默认是'下载'
	    dA.href = url;
	    document.body.appendChild(dA);
	    dA.click();
	    dA.remove(); // 下载之后把创建的元素删除
	    success(); //运行回调
	},
	//点击事件触发此函数保存文件
	download(url) {
		$common.loading();
		uni.downloadFile({
		    url: url,
		    success: (res) => {
		        const fileUrl = res.tempFilePath;
		        // #ifdef H5
		        this.saveFile(fileUrl, () => {
		            setTimeout(() => {
						$common.loading(false);
						$common.tips('下载成功');
					}, 1500)
		        });
		        // #endif
		        // #ifndef H5
		        uni.saveImageToPhotosAlbum({
		            filePath: fileUrl,
		            success: () => {
		                uni.showToast({
		                    title: "下载成功"
		                });
		            },
		            complete: () => {
		                $common.loading(false);
		            }
		        });
		        // #endif
		    }
		})
	},
	//长按图片触发此函数,保存图片
	operator(url) {
		$common.loading();
	    uni.showActionSheet({
	        itemList: ["保存图片"],
	        success: (res) => {
	            if (res.tapIndex === 0) { //数组下标
	                uni.showLoading({
	                    mask: true,
	                    title: "下载中..."
	                });
	                uni.downloadFile({
	                    url: url,
	                    success: (res) => {
	                        const fileUrl = res.tempFilePath;
	                        // #ifdef H5
	                        this.saveFile(fileUrl, () => {
	                            $common.loading(false);
	                        });
	                        // #endif
	                        // #ifndef H5
	                        uni.saveImageToPhotosAlbum({
	                            filePath: fileUrl,
	                            success: () => {
	                                uni.showToast({
	                                    title: "下载成功"
	                                });
	                            },
	                            complete: () => {
	                                $common.loading(false);
	                            }
	                        });
	                        // #endif
	                    }
	                })
	            }
	        }
	    })
	}
}

然后在页面调用

//下载视频
import $download from '@/common/download.js';
/*其他代码*/
downloadVideo() {
	$download.download(this.videoUrl);
}
### 实现H5视频下载功能 在UniApp中使用Vue3实现H5视频下载功能,可以通过`uni.downloadFile`方法完成视频文件的下载。该方法支持下载远程资源,并将下载结果保存到本地缓存中。对于H5,还需要结合浏览器的API来触发下载行为[^1]。 以下是实现的具体代码示例: ```javascript // 引入必要的API import { ref } from 'vue'; export default { setup() { const videoUrl = ref('https://example.com/video.mp4'); // 替换为实际的视频URL const downloadVideo = async () => { try { const res = await uni.downloadFile({ url: videoUrl.value, // 视频文件的URL success: (result) => { if (result.statusCode === 200) { // 下载成功后,创建a标签并触发下载 const link = document.createElement('a'); link.href = result.tempFilePath; // 下载后的临时文件路径 link.download = 'video.mp4'; // 设置下载的文件名 document.body.appendChild(link); link.click(); document.body.removeChild(link); } else { console.error('下载失败,状态码:', result.statusCode); } }, fail: (err) => { console.error('下载失败:', err); } }); } catch (error) { console.error('发生错误:', error); } }; return { videoUrl, downloadVideo }; } }; ``` #### 关键点说明 - **`uni.downloadFile`** 方法用于下载远程资源,返回的结果包含一个临时文件路径,表示下载文件在本地的存储位置[^1]。 -H5,需要通过创建`<a>`标签并设置其`href`属性为下载的临时文件路径,同时设置`download`属性指定下载的文件名,从而实现文件下载[^1]。 - 如果需要监听下载进度,可以使用`uni.downloadFile`的回调函数中的`progress`参数[^1]。 ### 注意事项 - H5的文件下载依赖于浏览器的行为,因此需要确保浏览器支持相关功能。 - 在某些情况下,可能需要处理跨域问题,确保服务器配置了正确的CORS头信息[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值