如何将图像从 expo-image-picker 保存到 expo-file-system 然后渲染?

2023-12-24

我试图将选定的图像存储在应用程序中,而不是存储在图像卷中。

这是我尝试过的:


    await FileSystem.downloadAsync(
      imageUri, // the image uri from expo-image-picker
      FileSystem.documentDirectory + `${uuid}-image.jpg`
    )
      .then(({ uri }) => {
        console.log("Finished downloading to ", uri);
      })
      .catch((error) => {
        console.error(error);
      });

我收到错误:

Unable to download file: Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL"

我也尝试过:

    await FileSystem.writeAsStringAsync(
      FileSystem.documentDirectory + `spotPhotos/${uuid}-image.jpg`,
      image.base64
    );

当我尝试在 ImageBackground 组件中使用图像时,这似乎成功保存了图像,但没有成功。


<ImageBackground
        source={'data:image/png;base64'+imageFile}
        style={{ borderRadius: 5, borderColor:  'black', width: 100, flex: 1, resizeMode: "cover", justifyContent: "center" }}
      >
...
</ImageBackground>

出现错误,提示无法读取文件夹:

getFile -> err [Error: File '/var/mobile/Containers/Data/Application/.../spotPhotos' could not be read.]

我可以使用 uri 保存图像文件本身吗?我需要将其转换为 Base64 并返回吗?


看来我已经能够成功保存使用以下内容编码的图像:

    await FileSystem.writeAsStringAsync(
      FileSystem.documentDirectory + `spotPhotos/${uuid}-imagelocation.jpg`,
      image.base64
    );

并通过以下方式访问编码图像:

 let imageFile = async () => {
    let uri = FileSystem.documentDirectory + "spotPhotos/" + spot.imageloc;
    let options = { encoding: FileSystem.EncodingType.Base64 };
   let base64 =  await FileSystem.readAsStringAsync(uri, options);
   return (base64);
  }

当我 console.log imageFile 时,我得到了一堵巨大的字符墙,然后导致 Vscodium 崩溃,即使我尝试使用 string.prototype.slice() 记录前几个字符,所以我无法检查它,但我认为这是 base64 编码的文件。

当我尝试将返回值引用为 Image 或 ImageBackground 组件的源时,如下所示:

<Image style={{width: 50, height: 50}} source={{imageFile}}/>
// or 

<Image style={{width: 50, height: 50}} source={{imageFile()}}/>

// or 

<Image style={{width: 50, height: 50}} source={{uri:`data:image/png;base64,${imageFile}`}}/>
// or 

<Image style={{width: 50, height: 50}} source={{uri:`data:image/jpg;base64,${imageFile}`}}/>

我收到警告消息:invalid prop 'source' supplied to 'Image'.

我还收到一条错误消息

Error: You attempted to set the key `_65` with the value of 1 on an object 
that is meant to be immutable and has been frozen.

自从提出建议以来这个帖子 https://stackoverflow.com/a/48135708/10235296不起作用,我的问题可能是我从文件中提取的数据。

在 expo 文件系统中存储和访问 jpg 文件的正确 api 用法是什么?


我使用以下代码得到了这个工作:

useEffect(() => {
    if (data[spotIndex].image) {
      imageFile();
    }
  }, [location]);

  let imageFile = async () => {
    if (data[spotIndex].image.length > 0) {
      let uri = FileSystem.documentDirectory + data[spotIndex].image;
      let getInfo = await FileSystem.getInfoAsync(uri);
      getInfo && console.log(getInfo);
      let options = { encoding: FileSystem.EncodingType.Base64 };
      let base64 = await FileSystem.readAsStringAsync(uri, options);
      setBase64Val("data:image/jpeg;base64," + base64);
    }
  };

<ImageBackground source={{ uri: base64Val }}>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将图像从 expo-image-picker 保存到 expo-file-system 然后渲染? 的相关文章

随机推荐

  • Kotlin Gson 反序列化

    我收到一个带有地图包装器的 JSON 数据模型Table 我试图使用泛型来传递超出包装器的类型 但它在运行时翻译得不好 这是我的 JSON 文件的示例 Table paymentmethod id 1 paymentmethod descr
  • 合并两个纠缠的凸包

    如何合并两个纠缠的凸包 例如this https i stack imgur com ALM4G jpg 使用格雷厄姆扫描或任何其他算法在线性时间内形成凸包 基本上 你使用安德鲁的修改 https en wikibooks org wiki
  • 本机查询支持 SQL Server 的 Spring data jpa 流

    我们需要使用 Spring data jpa 从 SQL Server 检索数据 由于我们有数百万条记录 因此我们无法一次请求加载所有数据 是否可以使用本机查询进行流式传输 是的 您可以让您的查询方法在 Spring Data JPA 中返
  • 添加翻转到 JTree 句柄

    我正在尝试对Collapsed Icon https docs oracle com javase 8 docs api javax swing plaf basic BasicTreeUI html collapsedIcon对于 JTr
  • 堆栈溢出 C++

    所以我试图解决一个任务 a 已经有代码 但系统输出 堆栈溢出 我是 C 新手 我的英语不好 所以很抱歉造成误解 include
  • 如何(正确)使用带有实时绑定的枚举类型(TObjectBindSourceAdapter)

    我在用着TObjectBindSourceAdapter对对象使用实时绑定 我正在使用的对象的属性之一TObjectBindSourceAdapter具有枚举类型 但是当我在对象中使用枚举类型时 适配器中的字段永远不会生成 我目前找到的唯一
  • 以编程方式显示 ImageView

    当用户单击按钮时 如何使 ImageView 出现在屏幕中间 我已将图像放在 res drawable 文件夹中 我一直在尝试使用下面的代码 但我不知道如何使 ImageView 出现 View v new ImageView getBas
  • 通过 GUID 保护 AJAX 请求

    我正在编写一个网络应用程序 它将通过 AJAX 发出请求 并希望锁定这些调用 经过一番研究后 我正在考虑使用某种形式的随机令牌 字符串 与请求 GUID 一起传回 这是我的算法的重要部分 将令牌分配给 JavaScript 变量 在服务器端
  • angerlySetInnerHTML 内的 React 组件

    在我的应用程序中 我需要获取 HTML 字符串 从服务器或从用户输入 也许是从 markdown 处理的东西 无论如何 看来我真的需要使用setDangerousHtml 但我还需要该部分内的一些反应组件 例如 我会将一些链接转换为Link
  • 从流中播放 MP3

    有没有办法使用 VB NET 或 C 直接从内存流 没有任何临时文件 播放 MP3 或者从 SQLITe 数据库播放 Thanks 我建议你尝试一下Mp3Sharp http www robburke net mle mp3sharp 它是
  • 如何使 Xvfb 显示可见?

    我通过 Xvfb 在显示编号 99 上运行 selenium 如下所示 usr bin Xvfb 99 ac screen 0 1024x768x8 导出 DISPLAY 99 java jar usr lib selenium selen
  • LoginButton 请求好友列表权限,为什么?

    我正在使用 facebook sdk 中内置的 LoginButton 小部件 我没有对其进行任何更改 我只是将其包含在我的 xml 布局文件中并调用setSessionStatusCallback没有其他的 然而 当我点击登录按钮时 Fa
  • XP 上的 IE 不支持 SNI 允许单个服务器使用多个证书

    我一直在寻找几个小时来找到我的问题的解决方案 虽然我相信我已经能够澄清我遇到问题的原因 但我一直无法找到解决方案 我有一台服务器托管多个网站 其中几个网站正在使用 SSL 证书 我有一些由所有站点访问的共享图像 阻止 SSL 站点上的非安全
  • 如何使用高斯分布对列表进行洗牌

    我想模拟消息上的错误 例如 1000010011 gt 1010000011 有没有办法在Python中实现这个 我尝试了以下方法 有效 import random a 1011101101 b el for el in a b 1 0 1
  • 使用 CSS 以完全流畅的布局使一个 div 显示在另一个 div 下

    我已经更新了我的代码并制作了一个小提琴来解释我正在尝试做的事情 我之前也有过类似的问题 但并没有体现出模板的流动性 我有一个完全流畅的布局我需要让一个div显示在另一个div下面 我想用 CSS 来实现 但我不想使用 javascript
  • Windows 2008 Server r2 上的 mysqltuner.pl

    我通常使用 linux 作为 mysql 并且有一个叫做 mysqltuner pl 的东西 这很棒 但是我们在 Windows 2008 r2 服务器上有一个 mysql 服务器 我想知道你们中是否有人知道我可以使用的类似于 mysqlt
  • 使用 React Router 将类 active 添加到其他父 html 标签

    我已经被困了几个小时来弄清楚如何在提供的 Reactrouter 标签的父 html 标签上添加 classActive 这是代码 使用React Router 版本 3 2 6 li div span Track Page span di
  • 即使使用调用方法也出现“跨线程操作无效”

    我在这里得到 跨线程操作无效 if vlc State VlcPlayerControlState PLAYING if vlc InvokeRequired vlc Invoke new MediaPlayerNoParameterDel
  • 自定义授权属性

    我正在构建自己的会员系统 我不想与 MS 会员提供商有任何关系 我浏览过互联网和 StackOverflow 但我所能找到的只是建立在 MS 会员资格提供商之上的会员资格提供商 不管怎样 我现在几乎已经把所有东西都连接好了 但我想使用一个利
  • 如何将图像从 expo-image-picker 保存到 expo-file-system 然后渲染?

    我试图将选定的图像存储在应用程序中 而不是存储在图像卷中 这是我尝试过的 await FileSystem downloadAsync imageUri the image uri from expo image picker FileSy