You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Expo FileSystem复制文件?Android版Expo WhatsApp状态下载器文件复制失败求助

解决Expo WhatsApp状态下载器文件复制后找不到的问题

我来帮你搞定这个问题!你遇到的核心问题主要有两个:SAF路径的兼容性和目标目录的可见性,咱们一步步来解决:

1. 先处理SAF路径的兼容问题

Expo的FileSystem.copyAsync对Android的SAF(存储访问框架)路径(也就是content://开头的路径)支持有限,直接复制可能不会成功。你需要先把SAF路径的文件转成Expo能处理的本地资源,再进行复制操作:

import * as MediaLibrary from 'expo-media-library';
import * as FileSystem from 'expo-file-system';

export const saveFile = async (filePath) => {
  // 将SAF路径的资源转为Expo可处理的本地资产
  const asset = await MediaLibrary.createAssetAsync(filePath);
  const localUri = asset.uri;

  // 定义目标存储路径
  const targetDir = `${FileSystem.documentDirectory}saved/`;
  // 先确保目标目录存在
  await FileSystem.makeDirectoryAsync(targetDir, { intermediates: true });
  const targetPath = `${targetDir}test.mp4`;

  // 执行复制操作
  await FileSystem.copyAsync({
    from: localUri,
    to: targetPath,
  });

  // 关键步骤:把文件同步到系统媒体库,让用户能在文件管理器找到
  await MediaLibrary.saveToLibraryAsync(targetPath);
};

2. 为什么之前找不到文件?

你之前用的FileSystem.documentDirectory是应用的私有目录,这个目录只有你的应用能直接访问,系统文件管理器默认是看不到的。哪怕复制操作成功了,你也没法在外部找到它。必须通过MediaLibrary.saveToLibraryAsync把文件同步到系统媒体库,这样用户就能在“下载”文件夹或者相册里找到这个MP4文件了。

3. 别忘了申请必要权限

在app.json里配置权限:

{
  "expo": {
    "android": {
      "permissions": [
        "READ_EXTERNAL_STORAGE",
        "WRITE_EXTERNAL_STORAGE",
        "MEDIA_LIBRARY_WRITE"
      ]
    }
  }
}

并且在调用保存函数前先请求权限:

const checkPermissions = async () => {
  const { status } = await MediaLibrary.requestPermissionsAsync();
  if (status !== 'granted') {
    alert('需要媒体库权限才能保存文件,请开启权限后重试!');
    return false;
  }
  return true;
};

// 使用示例
const handleSave = async (safPath) => {
  const hasPermission = await checkPermissions();
  if (hasPermission) {
    await saveFile(safPath);
    alert('文件保存成功!可以在系统媒体库找到它~');
  }
};

4. 验证复制是否成功

你可以在复制后通过以下代码确认文件状态:

const fileInfo = await FileSystem.getInfoAsync(targetPath);
console.log('文件是否存在:', fileInfo.exists);
console.log('文件大小:', fileInfo.size);

这样调整之后,你应该就能成功保存并找到下载的状态文件了!

内容的提问来源于stack exchange,提问作者abdemirza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:17:42