uniapp 文件下载(App端下载过的文件可直接打开)

uniapp官方API:

因为uni.saveFile保存的文件名是时间戳,所以我使用的是5+API实现的,如果不在乎文件名的可以结合以下三个接口实现:

uni.downloadFile(OBJECT)下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径。
注:文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 uni.saveFile,才能在应用下次启动时访问得到。

uni.saveFile(OBJECT)保存文件到本地。

uni.getSavedFileList(OBJECT)获取本地已保存的文件列表。

5+API:

saveFile(item) {
    const id = item.id
    const url = http.config.fileUrl + item.filePath
    // #ifdef APP-PLUS
    let files = uni.getStorageSync('files') ? JSON.parse(uni.getStorageSync('files')) : {}
    if (files[id]) { // 已下载的文件直接打开
        plus.runtime.openFile(files[id], {}, (res) => {
            console.log('文件不存在')
            downloadFile()
        })
    } else {
        downloadFile()
    }
    function downloadFile() {
        const dtask = plus.downloader.createDownload(url, {}, function (d, status) {
            if (status == 200) {
                console.log('保存成功')
                //下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径
                //const fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
                plus.runtime.openFile(d.filename);//选择软件打开文件
                files[id] = d.filename
                uni.setStorageSync('files', JSON.stringify(files))
            } else {
                //下载失败
                plus.downloader.clear();        //清除下载任务
            }
        });
        dtask.start();
    }
    // #endif

    // #ifdef H5
    window.open(url)
    // #endif
},

 

posted @ 2023-05-19 16:48  Stitchhhhh  阅读(1239)  评论(0编辑  收藏  举报