uni-app文件下载保存后提示保存成功但返回临时目录路径找不到文件?

发布于 1周前 作者 caililin 来自 Uni-App

uni-app文件下载保存后提示保存成功但返回临时目录路径找不到文件?

文件保存成功

路径:_doc/uniapp_save/17358888229740.docx

代码如下

saveFile(fileUrl) {
  uni.downloadFile({
    url: fileUrl,
    success: downloadResult => {
      if (downloadResult.statusCode === 200) {
        // 下载成功,保存文件
        uni.saveFile({
          tempFilePath: downloadResult.tempFilePath,
          success: saveResult => {
            // 保存成功,获取保存的文件路径
            console.log('saveResult1', saveResult)
            const savedFilePath = saveResult.savedFilePath;
            let tips = '文件保存成功,路径:' + savedFilePath;
            uni.showToast({
              icon: "none",
              title: tips
            })
            console.log('tips', tips)
          },
          fail: error => {
            // 保存失败
            uni.showToast({
              icon: "none",
              title: '文件保存失败'
            })
            console.error('文件保存失败:', error);
          }
        });
      } else {
        // 下载失败
        uni.showToast({
          icon: "none",
          title: '文件下载失败'
        })
        console.error('文件下载失败:', downloadResult.statusCode);
      }
    },
    fail: error => {
      // 下载文件失败
      console.error('下载文件失败:', error);
    }
  });
}

2 回复

app 不建议保存手机,游览器下载。
wxmini 在线预览,打开交给微信处理。


针对您提到的uni-app文件下载保存后提示保存成功但返回临时目录路径找不到文件的问题,这通常与文件保存路径的处理或文件访问权限有关。以下是一个简化的代码案例,用于展示如何在uni-app中实现文件下载并保存到临时目录,同时确保文件路径的正确性和可访问性。

首先,确保您已经在manifest.json中配置了必要的权限,比如writeExternalStorage(针对需要写入外部存储的情况)。

接下来是代码实现:

// 引入uni-app的文件系统模块
const fs = uni.getFileSystemManager();

// 定义一个函数用于下载文件
function downloadFile(url, filename) {
    return new Promise((resolve, reject) => {
        uni.downloadFile({
            url: url,
            success: (res) => {
                if (res.statusCode === 200) {
                    // 获取临时文件路径
                    const tempFilePath = res.tempFilePath;
                    
                    // 定义保存文件的目录(这里以临时目录为例)
                    const saveDir = `${wx.env.USER_DATA_PATH}/tmp/`;
                    const savePath = `${saveDir}${filename}`;

                    // 创建保存目录(如果不存在)
                    fs.access({
                        path: saveDir,
                        success: () => {
                            // 移动文件到指定目录
                            fs.moveFile({
                                from: tempFilePath,
                                to: savePath,
                                success: () => {
                                    console.log('文件保存成功:', savePath);
                                    resolve(savePath);
                                },
                                fail: (err) => {
                                    console.error('文件保存失败:', err);
                                    reject(err);
                                }
                            });
                        },
                        fail: () => {
                            // 目录不存在则创建
                            fs.mkdir({
                                path: saveDir,
                                recursive: true,
                                success: () => {
                                    // 再次尝试移动文件
                                    fs.moveFile({
                                        from: tempFilePath,
                                        to: savePath,
                                        success: () => {
                                            console.log('文件保存成功:', savePath);
                                            resolve(savePath);
                                        },
                                        fail: (err) => {
                                            console.error('文件保存失败:', err);
                                            reject(err);
                                        }
                                    });
                                },
                                fail: (err) => {
                                    console.error('目录创建失败:', err);
                                    reject(err);
                                }
                            });
                        }
                    });
                } else {
                    console.error('文件下载失败:', res.statusCode);
                    reject(new Error(`文件下载失败: ${res.statusCode}`));
                }
            },
            fail: (err) => {
                console.error('文件下载请求失败:', err);
                reject(err);
            }
        });
    });
}

// 使用示例
downloadFile('https://example.com/file.jpg', 'file.jpg').then(path => {
    console.log('最终保存路径:', path);
}).catch(err => {
    console.error('下载过程中发生错误:', err);
});

此代码段展示了如何下载文件并将其保存到应用的临时目录中。注意,这里使用了uni.downloadFileuni.getFileSystemManager()来处理文件下载和文件系统操作。确保在实际使用中处理好各种可能的错误情况,并根据需要调整保存路径和文件名。如果问题依旧存在,请检查文件系统的访问权限以及是否有其他代码或配置影响了文件操作。

回到顶部