赞
踩
刚开始我是直接使用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()
- }
- })
- })
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。