Phonegap / Cordova - 从临时目录中读取文件作为文本

时间:2014-12-18 11:26:08

标签: javascript android ios cordova audio

我正在使用cordova媒体插件录制.wav音频样本。

实际上我能够录制它们但我找不到获取已创建文件内容的方法。

如果我这样做:

// Record audio
//
function recordAudio() {
  var src = "myrecording.wav";
  var mediaRec = new Media(src, onSuccess, onError);

    // Record audio
    mediaRec.startRecord();

    // Stop recording after 10 sec
    var recTime = 0;
    var recInterval = setInterval(function() {

      recTime = recTime + 1;
      setAudioPosition(recTime + " sec");

      if (recTime >= 3) {
        clearInterval(recInterval);

        mediaRec.stopRecord();
         window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function(fs){
          fs.root.getFile("myrecording.wav", {create: true, exclusive: false},
            function(entry){
              console.log("console loggin file");
              console.log(entry);
        }, function(){
          alert("file create error");
        });
        }, null);
      }
    }, 1000);
  }

我在控制台中输入了这个:

{"isFile":true,"isDirectory":false,"name":"myrecording.wav","fullPath":"/myrecording.wav","filesystem":"<FileSystem: temporary>","nativeURL":"file:///Users/iamuser/Library/Developer/CoreSimulator/Devices/FC61A8C0-CF4B-4A1C-B22C-D8511B1B1707/data/Containers/Data/Application/716F442C-5076-4C69-9CA9-A1A8C2827898/tmp/myrecording.wav"}

但这不是文件内容,如何从documents:// directory?

中检索文件作为文本

使用媒体插件将文件记录到document://audio.wav路径中,该路径似乎是一个临时文件

1 个答案:

答案 0 :(得分:1)

媒体插件的含义是

  

提供录制和播放音频文件的功能

所以我想它不会给你原始数据。但是,如您所知,音频文件的URI,请使用文件插件从中获取数据。

<强>更新

如果您要上传文件,请参阅here

如果您想要将音频文件作为Base64编码的字符串,请参阅here

这是一个相当长的代码并且其中包含AngularJS,所以我将基本部分作为摘要在此处为​​您提供

function OnFileEntry(file){
  var reader = new FileReader();
  reader.onloadend = function(evt) {
      var image = evt.target.result;
      var base64Data  =   image.replace(/^data:audio\/mpeg;base64,/, "");
      base64Data  +=  base64Data.replace('+', ' ');
  };
  reader.readAsDataURL(file);
}

function OnGetFile(fileEntry){
  fileEntry.file(OnFileEntry, fail);
}

function OnFileSystem(fileSystem){
  fileSystem.root.getFile(recordName, null, OnGetFile, fail);
}

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, OnFileSystem, fail);

您需要更改的是recordName以匹配您的src属性的值。

这对你来说够了,还是有其他我可以帮助你的东西?