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

文件下载保存, 遇到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, 下载文件, 查看已下载的文件。
这个方式依然不能后台下载。
还有不知怎么修改下载的文件名

2 关注 分享
x***@163.com developer123

要回复文章请先登录注册

勇敢的心_

勇敢的心_

回复 白春光 :
好像就是找不到
2021-05-27 19:14
zopen

zopen

```javascript
plus.io.resolveLocalFileSystemURL(tempFilePath,(srcEntry)=>{
plus.io.resolveLocalFileSystemURL("_doc",(dstEntry)=>{
dstEntry.getDirectory("uniapp_save",{create:true,exclusive:false},(saveEntry)=>{
//console.log("srcEntry.toURL",srcEntry.toURL())
//console.log("dstEntry.toURL",dstEntry.toURL())
//console.log("saveEntry.toURL",saveEntry.toURL())
let fnames = srcEntry.name.split(".");
let fileName = Buffer.from(fnames[0]).toString('hex')+(fnames[1]?('.'+fnames[1]):'');
//console.log("fileName",fileName)
srcEntry.moveTo(saveEntry,fileName,(res)=>{
const savedFilePath = res.toURL()
console.log("savedFilePath",savedFilePath)
uni.setStorage({
key: key,
data: savedFilePath
})
complete && complete(savedFilePath)
});
})
},(err)=>{
console.error(err);
})
});

```
2021-04-29 12:35
zopen

zopen

改文件名,我这么解决的plus.io.resolveLocalFileSystemURL(tempFilePath,(srcEntry)=>{
plus.io.resolveLocalFileSystemURL("_doc",(dstEntry)=>{
dstEntry.getDirectory("uniapp_save",{create:true,exclusive:false},(saveEntry)=>{
//console.log("srcEntry.toURL",srcEntry.toURL())
//console.log("dstEntry.toURL",dstEntry.toURL())
//console.log("saveEntry.toURL",saveEntry.toURL())
let fnames = srcEntry.name.split(".");
let fileName = Buffer.from(fnames[0]).toString('hex')+(fnames[1]?('.'+fnames[1]):'');
//console.log("fileName",fileName)
srcEntry.moveTo(saveEntry,fileName,(res)=>{
const savedFilePath = res.toURL()
console.log("savedFilePath",savedFilePath)
uni.setStorage({
key: key,
data: savedFilePath
})
complete && complete(savedFilePath)
});
})
},(err)=>{
console.error(err);
})
});
2021-04-29 12:34
白春光

白春光

回复 勇敢的心_ :
找到问题了吗 ?我也遇到了
2021-04-26 18:41
勇敢的心_

勇敢的心_

我保存成功后怎么在手机文件系统找不到文件?
2021-04-25 21:48
tpframe2020

tpframe2020

我的情况也是,tmall.tpframe.com app端,下载整包安装失败,然后在手机里面却找不到安装包,神奇...
2020-10-26 10:52
2***@qq.com

2***@qq.com

???????????
2020-09-11 10:21
2***@qq.com

2***@qq.com

好像暂不支持,我有个解决方案:我们可以通过 全局变量 记录 uni.downloadFile 和 uni.saveFile 值 只要其中uni.downloadFile的文件值改变 在进行下一步操作 新手勿喷
2020-09-11 10:16