2***@qq.com
2***@qq.com
  • 发布:2020-03-16 18:18
  • 更新:2025-05-10 21:54
  • 阅读:36346

文件下载保存, 遇到uni.downloadFile的坑

分类:uni-app
 uni.downloadFile({  
            //https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top-e3b63a0b1b.png  
             url: 'http://music.163.com/song/media/outer/url?id=65538.mp3',   
             success: (res) => {  
                     if (res.statusCode === 200) {  
                         console.log('下载成功');  
                     }  
                  console.log(res.tempFilePath);  
                  uni.saveFile({  
                       tempFilePath: res.tempFilePath,  
                       complete(res) {  
                         console.log(res)  
                       }  
                     });  
             }  
         });

按官网api通过uni.downloadFile,获得tempFilePath 临时文件路径,再调用uni.saveFiled保存文件。测试发现几个问题:

  1. 下载图片(小文件),下载成功后调saveFiled 是可以保存成功的。但是换成MP3文件(大文件),下载成功后,保存报错提示文件不存在;

    。这个问题不知是BUG,还是说这种方式就不支持大文件。

  2. uni.downloadFile 不支持后台下载,手机黑屏就暂停下载了。

现在解决方案 改用H5+api
不多BB直接看代码:
//查看已下载的文件

         function checkDownload(){  
            plus.io.requestFileSystem( plus.io.PUBLIC_DOWNLOADS, function(fs){  
                    var directoryReader = fs.root.createReader();  
                    directoryReader.readEntries( function( entries ){  
                        var i;  
                        for( i=0; i < entries.length; i++ ) {  
                                    console.log( entries[i].name );  
                                    entries[i].name = i  
                        }   
                    }, function ( e ) {  
                        console.log( "Read entries failed: " + e.message );  
                    });  
                });  
         }    

         // 创建下载任务  
         function createDownload() {  
            var dtask = plus.downloader.createDownload("https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top-e3b63a0b1b.png", {}, function(d, status){  
                // 下载完成 下载的文件会保存在 PUBLIC_DOWNLOADS 目录下,只要不主动删除都会存在  
                if(status == 200){   
                    console.log("Download success: ");  
                    console.log(d);  
                    checkDownload()  
                } else {  
                     console.log("Download failed: " + status);   
                }    
            });  
            ;  
            dtask.start();   
         }  
         createDownload()   


解决了问题1, 下载文件, 查看已下载的文件。
这个方式依然不能后台下载。
还有不知怎么修改下载的文件名

1 关注 分享
x***@163.com

要回复文章请先登录注册

3***@qq.com

3***@qq.com

这个坑官方完全不打算解决吗?
2025-05-10 21:54
张脑丸儿

张脑丸儿

请问“_doc/uniapp_save/”这个地址从哪里找啊,在手机的文件里没有找到下载的东西
2025-04-29 18:44
x***@163.com

x***@163.com

回复 2***@qq.com :
uni.downloadFile下载超过50M就失败
2024-12-12 18:02
x***@163.com

x***@163.com

非常有用,200M+都可以下载,大佬厉害呀
2024-12-07 15:43
4***@qq.com

4***@qq.com

回复 1***@qq.com :
我也是这种情况QAQ,请问最后怎么解决的呀
2023-06-13 09:46
8***@qq.com

8***@qq.com

h5端可以使用这个下载功能吗?
2023-04-18 21:41
4***@qq.com

4***@qq.com

在手机上运行是可以吗?
2021-12-22 10:56
1***@qq.com

1***@qq.com

回复 1***@qq.com :
后端接口提供的是直接返回图片
2021-10-20 16:14
1***@qq.com

1***@qq.com

我下载的图片文件,但是成功返回的是json,很奇葩,如何破
2021-10-20 16:13
天生DR

天生DR

你这个是哪个平台会不成功? iOS 还是 Android 还是小程序?
2021-05-28 14:32