当前位置:
首页 >
行业知识 >
使用uni.downloadFile下载后端接口返回的文件流返回的图片、视频文件,适配微信小程序,抖音小程序(其他小程序还在开发过程中目前没有遇到问题,但是只有微信和抖音发布到线上了,可以正常下载)
行业知识
使用uni.downloadFile下载后端接口返回的文件流返回的图片、视频文件,适配微信小程序,抖音小程序(其他小程序还在开发过程中目前没有遇到问题,但是只有微信和抖音发布到线上了,可以正常下载)
2026-11-09 04:51:09
来源:互联网转载
刚开始我是直接使用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-TOUTIAOscopetype = 'scope.album'// #endifreturn 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()}})})}
上一篇:ps中怎么做立体效果?