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

React Native本地图片转Base64:如何获取正确的图片路径?

React Native本地图片转Base64:解决路径获取问题

本地资源在React Native打包后不会保留开发时的相对路径,直接用src/assets/images/myImage.png这类路径无法读取,以下是两种可行的解决方案:

方法1:借助react-native-fs库读取(推荐)

  1. 先安装依赖:
npm install react-native-fs --save
# 或使用yarn
yarn add react-native-fs
  1. 编写转换代码:
import RNFS from 'react-native-fs';
import { Image, Platform } from 'react-native';
// 先导入你的图片资源
import myImage from './src/assets/images/myImage.png';

const convertImageToBase64 = async () => {
  try {
    // 获取资源的打包后信息
    const assetSource = Image.resolveAssetSource(myImage);
    let filePath;

    // 处理不同平台的路径格式
    if (assetSource.uri.startsWith('file://')) {
      filePath = assetSource.uri.replace('file://', '');
    } else if (Platform.OS === 'android') {
      // Android资源需映射到RNFS可访问的资源目录
      filePath = `${RNFS.ResourceDirectoryPath}/${assetSource.uri.split('/').pop()}`;
    } else {
      filePath = assetSource.uri;
    }

    // 读取文件并转为Base64
    const base64Str = await RNFS.readFile(filePath, 'base64');
    console.log('转换后的Base64:', base64Str);
    return base64Str;
  } catch (err) {
    console.error('转换失败:', err);
  }
};

方法2:无第三方依赖,用AssetRegistry+fetch

通过React Native内置的AssetRegistry获取资源URI,再用fetch获取Blob后转Base64:

import { AssetRegistry, Image } from 'react-native';
import myImage from './src/assets/images/myImage.png';

const convertToBase64 = async () => {
  try {
    // 获取资源ID并解析URI
    const asset = AssetRegistry.getAssetByModuleId(myImage);
    const resourceUri = Image.resolveAssetSource(asset).uri;

    // 拉取资源Blob
    const response = await fetch(resourceUri);
    const blob = await response.blob();

    // 将Blob转为Base64
    const base64Str = await new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.onloadend = () => resolve(reader.result.split(',')[1]); // 去掉data:image/png;base64,前缀
      reader.onerror = reject;
      reader.readAsDataURL(blob);
    });

    console.log('转换后的Base64:', base64Str);
    return base64Str;
  } catch (err) {
    console.error('转换出错:', err);
  }
};

关键注意事项

  • 确保metro.config.js中配置了正确的资源扩展名,避免资源被打包忽略:
    const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
    
    module.exports = mergeConfig(getDefaultConfig(__dirname), {
      resolver: {
        assetExts: ['png', 'jpg', 'jpeg', 'gif'], // 包含你的图片格式
      },
    });
    
  • 绝对不要直接使用开发时的相对路径(如src/assets/images/myImage.png)访问资源,React Native打包后资源路径会被重新处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:43:29