无法在 Ionic 2 项目中使用 cordova 文件插件读取文件

2023-12-12

我正在尝试使用Cordova 文件插件读取移动设备中保存的图像,这样我就可以获得它的 Base64 编码,我需要远程存储它。问题在于,resolveLocalFilesystemUrl() 方法本应提供一个 File Entry 对象,但似乎返回一个 Entry 对象,这意味着我无法在其上调用 file。

这是应该获取 File Entry 对象的代码,以便我可以使用 file 方法来读取文件本身。

MediaCapture.captureImage().then((images)=>{
  self.image = images[0].localURL;
  File.resolveLocalFilesystemUrl(self.image).then((entry)=>{
    entry.file(function (file) {
      var reader = new FileReader();

      reader.onloadend = function (encodedFile) {
        var src = encodedFile.target.result;
        src = src.split("base64,");
        var contentAsBase64EncodedString = src[1];
      };
      reader.readAsDataURL(file);
    })
  }).catch((error)=>{
    console.log(error);
  })
})

我收到以下 Typescript 错误,它告诉我resolveLocalFilesystemUrl() 正在使用 Entry 对象进行解析,该对象没有文件方法。 (插件文档说resolveLocalFilesystemUrl使用File Entry对象进行解析,并且这样的对象肯定有一个提供文件本身的file方法):

Property 'file' does not exist on type 'Entry'. 

我已经尝试过我提供的路径类型resolveLocalFilesystemUrl()。我已经尝试过沿着 /var/mobile/Applications//Documents/path/to/file 行的完整路径和沿着 cdvfile://localhost/temporary/filename 行的本地 URL - 都不起作用

所以具体的问题是为什么resolveLocalFilesystemUrl()不为我提供一个文件条目对象,或者我如何让它这样做?更一般地说,如果上述方法不起作用,我如何读取 Ionic 2 中的文件以便获得它的 Base64 版本。

谢谢你!


我发现这个问题与Typescript有关。 solveLocalFilesystemUrl() 实际上是使用 File Entry 对象进行解析(当我将本地 url 作为文件路径传递给它时),但 Typescript 认为它是一个 Entry 对象,并且不认为可以在其上调用 file() 。

下面通过告诉 Typescript 解决了这个问题entry对象可以是任何类型,因此可以调用它的任何函数或属性。

MediaCapture.captureImage().then((images)=>{
  self.image = images[0].localURL;
  File.resolveLocalFilesystemUrl(self.image).then((entry: any)=>{
    entry.file(function (file) {
      var reader = new FileReader();

      reader.onloadend = function (encodedFile: any) {
        var src = encodedFile.target.result;
        src = src.split("base64,");
        var contentAsBase64EncodedString = src[1];
      };
      reader.readAsDataURL(file);
    })
  }).catch((error)=>{
    console.log(error);
  })
})

请注意,我还必须使用encodedFile: any为了允许 target.result 被调用encodedFile

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

无法在 Ionic 2 项目中使用 cordova 文件插件读取文件 的相关文章

随机推荐

  • 如何使用 webview url 发送标头值?

    我开发了一个带有 webview 的 android 应用程序 我想用 url 发送标头值 如果可能的话谁帮我提供一下源代码 Map
  • Java 中的泛型,使用通配符

    我有一个关于 Java 泛型的问题 即使用通配符 我有一个像这样的 GenClass 示例类 public class GenClass
  • 使用 Typescript 和 Visual Studio 2015 运行时进行编辑?

    在 Visual Studio 2013 中使用 Typescript 时 我似乎记得我可以在浏览器窗口中运行 TypeScript 源时编辑它 然后刷新浏览器窗口并获取新的更改 现在 在 Visual Studio 2015 中 Visu
  • DBpedia SPARQL 查询返回多个重复记录

    我对 SPARQL 还很陌生 并且对它现有的多种语法标准感到困惑 我正在努力使用以下查询从 DBpedia 获取唯一数据 SELECT DISTINCT Museum name abstract thumbnail latitude lon
  • Kotlin - 当前实例的返回类型

    我正在 Kotlin 中构建一个验证库 基类是abstract并实现适用于所有类型的方法 isNotNull例如 abstract class Validator
  • 通过 QTcpSocket 发送任何结构

    在写入套接字之前如何将结构转换为 char 形式 Use 数据流 它具有处理 Qt 类的字节顺序 字节顺序 和序列化的优点 简单地将结构转换为 char 可能会导致很多问题 包括字节顺序 编译器填充等 我建议使用流
  • 修改正在运行的SKAction的速度

    我有这个代码 implementation MyScene SKAction delayAction Inside a method delayAction SKAction waitForDuration 3 0 self runActi
  • 在 Rails 中批量导入 CSV?

    我正在使用 FasterCSV 将上传的文件导入到模型中 它非常适合小文件 然而 当我尝试导入大型数据集 21 000 行 时 需要很长时间 并且实时服务器上的浏览器超时 这是我当前的工作代码 logcount 0 Attendee tra
  • 在 python 中使用自定义步骤进行循环

    我可以在 python 中制作简单的 for 循环 例如 for i in range 10 然而 我不知道如何制作更复杂的 这在 C 中非常容易 如何在 python 中实现这样的 for 循环 for w n w gt 1 w w 2
  • 对三个数字进行排序的更简单方法

    有没有更简单更好的方法来解决这个问题 因为 我使用了太多变量 我用了这么多if else声明 我使用蛮力方法做到了这一点 编写一个程序 接收三个整数作为输入并按升序输出数字 不要使用循环 数组 include
  • Web API:无法序列化内容类型的响应正文

    我正在使用 ASP NET MVC 5 Web Api 我现有的应用程序包含许多 api 最近我实现了自定义 JsonConverter 它将根据时区转换日期 public class CustomInfoConverter JsonCon
  • TypeError - python 中的客户端错误

    我用 python 创建了一个客户端 服务器代码 服务器运行良好并侦听 8000 端口 但是当我通过客户端连接到它然后尝试向服务器发送消息时 出现以下错误 Traceback most recent call last File C Use
  • 如何检索 ADO.NET SqlCommand 的结果?

    我正在使用 ASP NET 我想查找表中的行数 我知道这是 SQL 代码 select count from topics 但是如何让它显示为数字呢 我想做的就是运行该代码 如果它 0 显示一件事 但如果它大于 0 显示其他内容 这是我到目
  • 如何将QLineEdit背景变成进度条

    该代码创建一个对话框QLineEdit and a QPushButton 单击按钮时我想要QLineEdit变成一个进度条 显示按下按钮触发的过程的进度 当该过程完成时QLineEdit应该恢复到正常的 LineEdit 外观 如何实现这
  • 检查字符串是否以以下结尾

    我想检查字符串是否以以下结尾 v number 例如 hello world false hello world v2 true hello world v false hello world v88 true 不完全确定如何执行此正则表达
  • “与 Google 集成”按钮消失

    这是我们的 Google Apps Marketplace 应用程序的列表 该按钮也从我们集成的每个页面上消失了 当我在应该出现该按钮的页面上查看浏览器中的控制台日志时 我看到对此网址的调用 https apis google com ad
  • 根据序列号重命名匹配的文件

    假设我有一堆 mac 屏幕截图的文件 Screen Shot 2018 11 09 at 12 37 37 PM png Screen Shot 2018 11 10 at 4 53 02 PM png Screen Shot 2018 1
  • Chartjs - 如何在 x 轴标签上获取过去 7 天的数据?

    我试图在折线图的 x 轴上获取过去 7 天的信息 使用 Chartjs 做这个的最好方式是什么 Thanks 您可以使用以下代码实例化过去 7 天的图表 let start new Date end new Date start setDa
  • 优化行为测试套件

    我有一个测试套件 其中有 20 个功能文件 并且正在执行 100 MySQL CRUD 操作 大约需要 5 分钟才能完成 如果我手动进行测试 最多需要大约 7 分钟 我需要知道的是 我需要做什么才能优化整个流程 Note 平行跑者不支持对于
  • 无法在 Ionic 2 项目中使用 cordova 文件插件读取文件

    我正在尝试使用Cordova 文件插件读取移动设备中保存的图像 这样我就可以获得它的 Base64 编码 我需要远程存储它 问题在于 resolveLocalFilesystemUrl 方法本应提供一个 File Entry 对象 但似乎返