当前位置:   article > 正文

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

uni.downloadfile

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

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

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

  1. // 下载文件资源 type用来判断要下载的文件是图片还是视频以此来正确的调用方法
  2. url 为接口的路径
  3. const dowoloadvideoandimg = (type, url) => {
  4. new Promise((resole, reject) => {
  5. uni.downloadFile({
  6. url: url, // 文件的下载地址
  7. success: async (res) => {
  8. if (res.statusCode === 200) {
  9. // 下载图片视频之前记得先授权
  10. await saveimgandvideo()
  11. if (type == 'aiphoto') {
  12. console.log('图片', url, res)
  13. await dowoloadimg(res.tempFilePath)
  14. resole()
  15. } else {
  16. console.log('视频', url, res)
  17. await dowoloadvideo(res.tempFilePath)
  18. resole()
  19. }
  20. } else {
  21. uni.showToast({
  22. title: '文件下载失败',
  23. icon: process.env.UNI_ERROR
  24. });
  25. resole()
  26. // console.log('下载文件失败:', res);
  27. }
  28. },
  29. fail(err) {
  30. uni.showToast({
  31. title: '获取文件失败',
  32. icon: process.env.UNI_ERROR
  33. });
  34. resole()
  35. // console.log('下载文件失败:', err);
  36. }
  37. })
  38. })
  39. }
  40. // 下载图片视频之前先授权
  41. const saveimgandvideo = () => {
  42. let scopetype = 'scope.writePhotosAlbum'
  43. // #ifdef MP-TOUTIAO
  44. scopetype = 'scope.album'
  45. // #endif
  46. return new Promise((resolve, reject) => {
  47. // 向用户发起授权请求
  48. uni.authorize({
  49. // 字节小程序下为这个
  50. scope: scopetype, //(不同平台, 参数不同),
  51. success: (res) => {
  52. // 已授权
  53. //下载图片资源至本地,返回文件的本地临时路径
  54. // this.saveLocal()
  55. resolve('ok')
  56. },
  57. fail: () => {
  58. // 拒绝授权,获取当前设置,单独授权
  59. uni.getSetting({
  60. success: (result) => {
  61. console.log(result)
  62. if (!result.authSetting[scopetype]) {
  63. uni.showModal({
  64. content: '由于您还没有允许保存图片到您相册里
  65. ,无法进行保存,请点击确定允许授权',
  66. success: (res) => {
  67. if (res.confirm) {
  68. uni.openSetting({
  69. success: (
  70. result
  71. ) => {
  72. console
  73. .log(
  74. '授权成功',
  75. result
  76. );
  77. // this.saveLocal()
  78. resolve(
  79. 'ok'
  80. )
  81. },
  82. fail() {
  83. console
  84. .log(
  85. '授权失败',
  86. result
  87. );
  88. reject('')
  89. }
  90. });
  91. }
  92. },
  93. fail() {
  94. console
  95. .log(
  96. '授权失败',
  97. result
  98. );
  99. reject('')
  100. }
  101. });
  102. console.log('用户关闭了权限')
  103. } else {
  104. resolve('ok')
  105. }
  106. }
  107. });
  108. }
  109. })
  110. });
  111. }
  112. //下载图片
  113. const dowoloadimg = (dataurl) => {
  114. new Promise((resole, reject) => {
  115. uni.saveImageToPhotosAlbum({
  116. filePath: dataurl,
  117. success: function(res) {
  118. uni.showToast({
  119. title: '保存成功'
  120. })
  121. resole('')
  122. },
  123. fail(error) {
  124. uni.showToast({
  125. title: '保存失败',
  126. icon: process.env.UNI_ERROR
  127. })
  128. console.log(error)
  129. resole('')
  130. }
  131. })
  132. })
  133. }
  134. //下载视频
  135. const dowoloadvideo = (dataurl) => {
  136. new Promise((resolve, reject) => {
  137. uni.saveVideoToPhotosAlbum({
  138. filePath: dataurl,
  139. success: function(res) {
  140. console.log(res)
  141. uni.showToast({
  142. title: '保存成功'
  143. })
  144. resolve()
  145. },
  146. fail(error) {
  147. uni.showToast({
  148. title: '保存失败',
  149. icon: process.env.UNI_ERROR
  150. })
  151. console.log(error)
  152. resolve()
  153. }
  154. })
  155. })
  156. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/945317
推荐阅读
相关标签
  

闽ICP备14008679号