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

Stitchhhhh / 2023-05-19 / 原文

uniapp官方API:

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

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

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]);
    } else {
        const dtask = plus.downloader.createDownload(url, {}, function (d, status) {
            if (status == 200) {
          //下载成功,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 },