使用uni.downloadFile下载后端接口返回的文件流返回的图片、视频文件,适配微信小程序,抖音小程序(其他小程序还在开发过程中目前没有遇到问题,但是只有微信和抖音发布到线上了,可以正常下载)

2024-06-04 1748阅读

刚开始我是直接使用uni.downloadFile调用接口获取到文件流临时路径再调用图片和视频的下载api,但是最坑爹的地方就在这里,微信小程序正常,在抖音小程序中我们使用uni.downloadFile获取到的图片或者视频文件临时路径后缀为.php(因为我们的后台是用php写的),以至于在抖音小程序一直下载文件失败,我不明白为什么会发生这样的情况,如果大家没有出现这种情况那么可以直接正常使用。

解决方法:在我尝试了多种方法后都没有解决直接从接口获取文件流临时路径,所以我将url换为了图片或者视频的线上可直接访问的地址,完美解决!关于uni.downloadFile获取到的图片或者视频文件临时路径后缀为.php的问题我没有找到原因,有知道原因的小伙伴可以分享评论一下,十分感谢!!!

注:直接修改文件临时路径后缀是不可行的!!!

//  下载文件资源  type用来判断要下载的文件是图片还是视频以此来正确的调用方法 
  url 为接口的路径
const dowoloadvideoandimg = (type, url) => {
	new Promise((resole, reject) => {
		uni.downloadFile({
			url: url, // 文件的下载地址
			success: async (res) => {
				if (res.statusCode === 200) {
            // 下载图片视频之前记得先授权
					await saveimgandvideo()
					if (type == 'aiphoto') {
						console.log('图片', url, res)
						await dowoloadimg(res.tempFilePath)
						resole()
					} else {
						console.log('视频', url, res)
						await dowoloadvideo(res.tempFilePath)
						resole()
					}
				} else {
					uni.showToast({
						title: '文件下载失败',
						icon: process.env.UNI_ERROR
					});
					resole()
					// console.log('下载文件失败:', res);
				}
			},
			fail(err) {
				uni.showToast({
					title: '获取文件失败',
					icon: process.env.UNI_ERROR
				});
				resole()
				// console.log('下载文件失败:', err);
			}
		})
	})
}
// 下载图片视频之前先授权
const saveimgandvideo = () => {
	let scopetype = 'scope.writePhotosAlbum'
	// #ifdef MP-TOUTIAO
	scopetype = 'scope.album'
	// #endif
	return new Promise((resolve, reject) => {
		// 向用户发起授权请求
		uni.authorize({
			// 字节小程序下为这个
			scope: scopetype, //(不同平台, 参数不同),
			success: (res) => {
				// 已授权
				//下载图片资源至本地,返回文件的本地临时路径
				// this.saveLocal()
				resolve('ok')
			},
			fail: () => {
				// 拒绝授权,获取当前设置,单独授权
				uni.getSetting({
					success: (result) => {
						console.log(result)
						if (!result.authSetting[scopetype]) {
							uni.showModal({
								content: '由于您还没有允许保存图片到您相册里
,无法进行保存,请点击确定允许授权',
								success: (res) => {
									if (res.confirm) {
										uni.openSetting({
											success: (
												result
											) => {
												console
													.log(
														'授权成功',
														result
													);
												// this.saveLocal()
												resolve(
													'ok'
												)
											},
											fail() {
												console
													.log(
														'授权失败',
														result
													);
												reject('')
											}
										});
									}
								},
								fail() {
									console
										.log(
											'授权失败',
											result
										);
									reject('')
								}
							});
							console.log('用户关闭了权限')
						} else {
							resolve('ok')
						}
					}
				});
			}
		})
	});
}
//下载图片
const dowoloadimg = (dataurl) => {
	new Promise((resole, reject) => {
		uni.saveImageToPhotosAlbum({
			filePath: dataurl,
			success: function(res) {
				uni.showToast({
					title: '保存成功'
				})
				resole('')
			},
			fail(error) {
				uni.showToast({
					title: '保存失败',
					icon: process.env.UNI_ERROR
				})
				console.log(error)
				resole('')
			}
		})
	})
}
//下载视频
const dowoloadvideo = (dataurl) => {
	new Promise((resolve, reject) => {
		uni.saveVideoToPhotosAlbum({
			filePath: dataurl,
			success: function(res) {
				console.log(res)
				uni.showToast({
					title: '保存成功'
				})
				resolve()
			},
			fail(error) {
				uni.showToast({
					title: '保存失败',
					icon: process.env.UNI_ERROR
				})
				console.log(error)
				resolve()
			}
		})
	})
}

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]