使用 cordova-plugin-file 从 cordova (ionic) 中的 SD 卡读取文件作为数组

2024-05-22

我在我的应用程序中使用需要作为缓冲区数组获取的音频文件。为此,我让用户选择一个文件(使用 Ionic/Cordova FileChooser 插件 https://ionicframework.com/docs/native/file-chooser/)然后我得到一个像这样的URL:

content://com.android.providers.media.documents/document/audio%3A8431

之后,我将此发送至科尔多瓦插件文件 https://github.com/apache/cordova-plugin-file resolveNativePath函数,我得到一个类似的路径:

file:///storage/emulated/0/Prueba interno/Interno, Teddybär, Dreh Dich Um__320kbps.mp3

在这里我做我的audioFileInfo Object

audioFileInfo = {name: "Interno, Teddybär, Dreh Dich Um__320kbps.mp3",
                 originalPath: "content://com.android.providers.media.documents/document/audio%3A8431",
                  path: "file:///storage/emulated/0/Prueba interno"}

最后我打电话filePlugin.readAsArrayBuffer(audioFileInfo.path, audioFileInfo.name)获取缓冲区数组。

当文件位于设备内部存储时,它可以正常工作,但是当文件来自 SDCard 时,它不起作用,因为readAsArrayBuffer返回“未找到”。

SD Card:

文件选择器 URL

content://com.android.externalstorage.documents/document/3D91-1C14%3AM%C3%BAsica%20Dana%2F1%20-%20Teddyb%C3%A4r%2C%20Teddyb%C3%A4r%2C%20Dreh%20Dich%20Um__320kbps.mp3

解析本地路径:

file:///sdcard/Música Dana/1 - Teddybär, Teddybär, Dreh Dich Um__320kbps.mp3

音频文件信息:

audioFileInfo = {
    name :"1 - Teddybär, Teddybär, Dreh Dich Um__320kbps.mp3"
    originalPath : "content://com.android.externalstorage.documents/document/3D91-1C14%3AM%C3%BAsica%20Dana%2F1%20-%20Teddyb%C3%A4r%2C%20Teddyb%C3%A4r%2C%20Dreh%20Dich%20Um__320kbps.mp3",
    path : "file:///sdcard/Música Dana"
}

读取为数组缓冲区:

FileError {code: 1, message: "NOT_FOUND_ERR"}

我已经尝试过 FilePlugins 的resolveLocalFilesystemUrl()我明白了Entry object:

{
    filesystem: {
        name: "content",
        root: {
            filesystem {
                name: "content",
                root: "...."
            }
        },

        fullPath: "/",
        isDirectory: true,
        isFile: false,
        name: "",
        nativeURL: "content://",
    },
    fullPath: "/com.android.externalstorage.documents/document/3D91-1C14:Música Dana/1 - Teddybär, Teddybär, Dreh Dich Um__320kbps.mp3",
    isDirectory: false,
    isFile: true,
    name: "1 - Teddybär, Teddybär, Dreh Dich Um__320kbps.mp3",
    nativeURL: "content://com.android.externalstorage.documents/document/3D91-1C14%3AM%C3%BAsica%20Dana%2F1%20-%20Teddyb%C3%A4r%2C%20Teddyb%C3%A4r%2C%20Dreh%20Dich%20Um__320kbps.mp3",
}

但是我不知道该用什么path在第一个参数中readAsArrayBuffer功能。

如果我使用fullPath and name它抛出编码错误。 如果我只得到没有名称的“路径”fullPath,它也会抛出编码错误.

有人有类似的经历吗?


我最终制作了自己的 FileReader 来处理带有返回信息的文件resolveLocalFilesystemUrl,请注意此代码使用 Typescript


    let entry = await this.filePlugin.resolveLocalFilesystemUrl(audioFileInfo.originalPath);
    let fileEntry: FileEntry = entry as FileEntry;
   
    console.log("fileEntry", fileEntry);
   
    let readFilePromise = new Promise < any > (resolve => {
        console.log("getting File from fileEntry");
        // fileEntry.getMetadata(data => {
        //     console.error("metadata", data); 
        // });
        fileEntry.file((file) => {
            console.log("File", file);
            var reader = new FileReader();
   
            reader.onloadend = () => {
                console.log("Successful file read: ", reader.result);
                resolve(reader.result);
            };
   
            reader.onprogress = (progressEvent) => {
   
                let fileUpdateInfo: FileLoadingUpdateInfo = {
                    audioFileInfo: audioFileInfo,
                    total: progressEvent.total,
                    loaded: progressEvent.loaded,
                    percent: parseFloat((progressEvent.loaded * 100 / progressEvent.total).toFixed(2))
                }
                this.updateAudioFileLoadingText$.next(fileUpdateInfo);
            };
            reader.onerror = (e) => {
                console.error("The reader had a problem", e)
                resolve(undefined);
            }
            reader.onabort = (e) => {
                console.error("We aborted...why???", e)
                resolve(undefined);
            }
            console.log("using reader to readAsArrayBuffer ");
            reader.readAsArrayBuffer(file);
   
   
        }, (e) => {
            console.error(e)
        });
    });
    let fileBufferArray = await readFilePromise;
    console.log("fileBufferArray", fileBufferArray);
   
    return fileBufferArray;

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

使用 cordova-plugin-file 从 cordova (ionic) 中的 SD 卡读取文件作为数组 的相关文章

  • Cordova 文件传输到节点服务器

    我正在使用 ng Cordova fileTransfer 插件尝试将用户相机胶卷中的照片上传到 Node Express 服务器 我正在获取照片的本地 URI 并尝试将其传递给插件 如下所示 cordovaFileTransfer upl
  • 使用离子框架的语音识别

    我正在寻找一种使用离子框架进行语音识别的方法 我想在 ios 和 android 设备上运行一个应用程序 目前 我在 ios 和 android 中提供网络视图 并有一个通用的代码库 我想为其添加语音识别功能并获取语音的输出 如果您在 Go
  • 在 PhoneGap 中启用数字键盘上的 Enter 键

    我们在 Android 3 22 上运行 PhoneGap 2 6 jquery mobile 和backbone 也在其中 我们希望用户在字段中输入值后可以点击回车键来提交表单 该字段是数字输入
  • 将 Cordova console.log 写入文件

    有谁知道是否有可能console log写入文件或类似的东西 我已经记录了我的应用程序 但它仅写在控制台上 出于远程目的debugging我也需要将现有日志写入文件 我想创建一个文件并将日志写入该文件中 但这将使我复制现有的日志代码 因此
  • Android studio SDK 管理器丢失

    我正在关注这个离子教程 https ionicacademy com get started with ionic 在 Android Studio 中设置 SDK 来测试我的 ionic 项目时遇到了一些问题 我正在寻找 SDK 管理器
  • 使用 PhoneGap for Android:无法在数据库中创建表

    背景 我是 PhoneGap 的新手 尝试在 Android 上使用 HTML5 PhoneGap 在 SQLite 中创建一个简单的表 这是我的 HTML 代码 使用 PhoneGap 网站的参考代码
  • 如何在 Xcode 4 和 Cordova 中使用符号链接

    我无法让 Xcode 将 www 资源复制到我基于 PhoneGap 的 iPhone 应用程序 我考虑过使用 Git 子模块 但由于应用程序必须在不同的平台 iPhone Android 等 上运行 并且必须采用不同的品牌 图像 CSS
  • 添加媒体插件后 Ionic Cordova IOS 构建失败

    我正在使用 Ionic Framework 和 Cordova 开发一个移动应用程序 我尝试添加 Cordova 媒体插件 但它无法为我构建 我什至尝试创建一个新的启动选项卡项目 然后添加媒体插件 如图所示 由于添加了媒体插件 该项目无法编
  • cordova 添加平台 - 执行命令“ant”时出错

    在一开始的时候 我知道这个问题已经被问了太多次了 我检查了所有的答案 尝试了我发现的每一种组合和每一种解决方案 但到目前为止没有任何效果对我有用 问题 我已经成功安装了cordova 从官方网站下载了它 并且我一直在遵循指南 我已经添加wp
  • Cordova、PhoneGap 1.7 Android 后退按钮不触发

    我在 Android 上使用 Cordova 1 7 它似乎可以工作 例如 我可以从图库中选择图像 但我无法触发后退按钮事件 按下后退按钮时 应用程序会自动关闭 我的构建目标是 Android 2 2 我把这个放在onReady方法 完全按
  • 对 HTML 文件的更改未显示在内置的 PhoneGap 3.0 应用程序上

    所以我有一个 Phonegap 3 0 应用程序 project文件夹 它的项目 project platforms android 在 Eclipse 上 问题是当我改变时project www index html 并告诉 Eclips
  • 如何捕获退出应用程序事件?

    嘿 我需要在我的phonegap 应用程序中捕获退出应用程序事件 实际上 如果玩家试图作弊并通过最小化退出应用程序并退出任务管理器 而他已经开始了一个新的等级 我想触发一个looseLife 函数 如果他正确退出 按后退按钮就可以正常工作
  • 在哪里可以找到 Meteor 为 WebStorm 插件安装的 PhoneGap/Cordova 可执行文件?

    我使用 WebStorm 9 EAP 进行 Meteor 0 9 4 pre 11 开发 并想使用 WebStorm 的 PhoneGap Cordova 插件 但我找不到 Meteor 必须安装在某处的 PhoneGap Cordova
  • 使用 WL.Client.reloadApp 重新加载应用程序时是否会调用 wlcommoninit

    使用 WL Client reloadApp 重新加载应用程序时 是否会调用 wlcommoninit 我在混合应用程序中有用户注销功能 注销后 将调用 WL Client 的 reloadApp 方法 重新加载后 似乎没有调用 wlcom
  • cordova - 错误:无法获取平台 android

    我安装了 cordova 并创建了一个新项目 但是当我使用这个命令添加android平台时 cordova平台添加android 出现此错误 Error Failed to fetch platform android Probably t
  • ionic2 对菜单项应用 ngx-translate

    我正在使用 ngx translate 来支持多语言 并且运行良好 但我也想申请菜单项 我该如何实现这一目标 我有 3 个菜单项 我想更改每个标题的语言 ts file appPages PageObj title Profile comp
  • Android 上的 Ionic Cordova 相机插件错误

    科尔多瓦版本是 6 3 0 Cordova Android版本是 5 0 0 相机插件版本 cordova plugin camera 2 2 0 相机 我的代码适用于 Android 5 0 和 Android 6 0 的多种设备 但不适
  • 如何在 angularjs 4 中设置 http 调用超时?

    我在 angularjs 4 官方页面上看到过 https angular io guide http https angular io guide http 设置http调用超时但我没有找到任何参考 有人尝试过设置吗 谢谢 如果您使用 R
  • AngularJs 数据绑定不适用于 ionic

    我觉得我在离子输入文本中遗漏了一些明显的东西 我在用angular ui router这条路线 stateProvider state findPersons url findPersons templateUrl html findPer
  • 跨 webView 和 CordovaWebView android 共享 localStorage

    我正在尝试在 webView 和 CordovaWebView 之间共享活动数据 CordovaWebView 当然使用 webView 这就是为什么我不明白为什么存储在我的 PhoneGap 应用程序的 localStorage 中的数据

随机推荐

  • HTML 上传 MAX_FILE_SIZE 似乎不起作用

    我想知道隐藏字段是如何命名的MAX FILE SIZE应该工作吗
  • CodeIgniter 项目给出 303/压缩错误

    尝试设置一个基于 CodeIgniter 的项目进行本地开发 LAMP 堆栈 并且一旦更新了所有配置文件 这意味着我成功地为 CodeIgniter 生成了有意义的引导错误 我在浏览器中收到此错误 Chrome Error 330 net
  • 如何将元素浮动到水平居中元素的左侧或右侧?

    对于分页 我想使用元素的水平对齐方式 如下所示
  • 如何在 Laravel 模型中将 String 转换为 int

    这是我的解决方案 我在模型类中写了这个 评分是字符串类型 code int ratings 但我需要在从数据库检索 ratings 时更改它 我该怎么做 我们有一个模型的属性称为cast您可以在其中指定列名称 如下所示 The attrib
  • RecyclerView.Adapter 的 onCreateViewHolder 方法中的parent.getContext

    我有一个附加到我的 MainActivity 的自定义片段 片段的布局文件包含 recyclerview 小部件 片段 main xml
  • 如何以编程方式将 @Bean 定义添加到 Spring 上下文?

    通常我使用以下方法将对象添加到 spring 上下文中 Bean定义 Autowired private SpringBus bus register a singleton Bean public WebservicePort getPo
  • 如何将 gettext 字典中的术语输入 JavaScript?

    我正在尝试使用 php 和 javascript jquery 开发一个支持多种语言的网站 我正在尝试获得以下东西 高效 我需要尽可能减少这个操作的后端处理 可扩展 向翻译添加新字符串必须简单实用 问题是 我的 javascript 代码正
  • 无法获取 ComboBox 所选项目值

    我现在正在使用这段代码 我需要获取组合框所选项目的字符串值 procedure TForm5 BitBtn5Click Sender TObject var c k t g string begin Get the name of the
  • 如何强制 OCaml 推断出更通用的类型?

    我想定义一个接受可选参数的函数 该参数是一个函数 a gt b 默认值应该是identity 实际上就是 a gt a 但我认为没有理由它不应该与更通用的兼容 a gt b 当我尝试时 let optional apply f i matc
  • JQuery 可搜索下拉框

    我有一个可搜索列表 是使用 JQuery 插件创建的 http plugins jquery com searchit http plugins jquery com searchit 但我希望当列表框第一次出现时默认选择一些值 即使我在选
  • iTextSharp。为什么单元格背景图像顺时针旋转90度?

    我希望使用单元格背景使用它的自然尺寸 如果它们不适合单元格 图像应该被裁剪 另一件事是 当我使用图案填充图像时 图像实际上旋转了 90 度 所以这个问题的主要问题是为什么图案图像在添加后会旋转我已经用谷歌搜索答案并阅读文档 但找不到任何解释
  • IE 位置问题:绝对

    我有这段代码 它在 Firefox 中运行得很好 但在资源管理器上会向右射击 这段代码有什么我看不到的问题吗 感谢您的帮助 div a href http www mysite com img src images sponsor png
  • ModX Revo:更新站点基本 URL?

    在选择域名之前 我为客户开发了一个网站 因此 网站页面的 URL 如下所示 http host mynost net tempname index php id 8 域名现已购买 但如果我单击任何 Wayfinder 链接 它仍然使用上面的
  • 如何在R中生成六角形网格

    我希望能够创建一个覆盖另一个 SpatialPolygon 的 SpatialPolygons 对象 这是一个六角形网格 我希望所有六边形的直径为 1 公里 理想情况下我可以改变这个 并且所有六边形一起覆盖整个物体 下面的方法似乎只涵盖了一
  • 发送excel电子邮件附件c#

    我有一种方法可以创建 Excel 文件并将其作为电子邮件附件发送 发送方法有效 但问题是它将 Excel 转换为 txt 文件 当您打开它时 它会显示This file has been removed 我使用 EPPLUS 库创建 Exc
  • TeamCity:如何告诉 MSBuild 考虑发布配置文件参数?

    当我想使用发布配置文件编译我的项目时 我使用 MSBuild 步骤进行 TeamCity 构建配置 我的发布配置文件位于MyProject Properties PublishProfiles profile pubxml 我的配置文件 p
  • 在chrome中将pdf渲染为iframe

    我正在尝试将 pdf 托管在隐藏的 iframe 中 但在 Chrome 中呈现较小的问题时遇到问题 我必须刷新页面才能正确加载 JSfiddle 在这里https jsfiddle net 464xo40f https jsfiddle
  • 2n + 1 法定人数是什么意思?

    我在描述 HBase 的 Zookeeper 配置时遇到过这个问题 但我对这个术语并不熟悉 N 与我的 HBase 集群中的节点数量有关系吗 或者我应该在 Zookeeper 集群中使用的节点数量 2f 1是指你所需要的可靠性 可用性水平
  • 仅对布尔可观察值中的错误值进行反跳

    我有一个布尔可观察值 通过观察者 启动和停止 Android 服务 当 true 被传递时 服务必须立即启动 当 false 被传递时 我想将其反跳 以防很快出现 true 以避免不必要的 和破坏性的 服务停止和启动 是否有可以做到这一点的
  • 使用 cordova-plugin-file 从 cordova (ionic) 中的 SD 卡读取文件作为数组

    我在我的应用程序中使用需要作为缓冲区数组获取的音频文件 为此 我让用户选择一个文件 使用 Ionic Cordova FileChooser 插件 https ionicframework com docs native file choo