Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从firebase上传/下载音频_Javascript_Angularjs_Cordova_Firebase_Firebase Storage - Fatal编程技术网

Javascript 从firebase上传/下载音频

Javascript 从firebase上传/下载音频,javascript,angularjs,cordova,firebase,firebase-storage,Javascript,Angularjs,Cordova,Firebase,Firebase Storage,我正在尝试上传音频,稍后再下载。 我正在使用firebase server进行此过程 我有两个疑问。解决任何一个问题都可以解决以下问题: 如何将文件作为文件而不是blob上载。我相信应该有一种方法可以按原样上传文件,而不是先将文件转换为blob,然后再上传(我现在正在这么做) 我可以下载文件,但不能播放。由于文件首先转换为DataURL/ArrayBuffer,然后上载,如何将其转换回音频(mp3/wav) 要上载的代码: $scope.uploadFile = function(){ //

我正在尝试上传音频,稍后再下载。 我正在使用firebase server进行此过程

我有两个疑问。解决任何一个问题都可以解决以下问题:

  • 如何将文件作为文件而不是blob上载。我相信应该有一种方法可以按原样上传文件,而不是先将文件转换为blob,然后再上传(我现在正在这么做)
  • 我可以下载文件,但不能播放。由于文件首先转换为DataURL/ArrayBuffer,然后上载,如何将其转换回音频(mp3/wav)
  • 要上载的代码:

      $scope.uploadFile = function(){ // uploading file
    var storageRef= firebase.storage().ref();
    var filename= $scope.audio.src.substring($scope.audio.src.lastIndexOf("/")+1,$scope.audio.src.length);
    $scope.fname= filename;
    // fetching file to upload
    baseServ.dirEntry.getFile(filename, {}, function(entry){
      entry.file(function(gotfile){
        var reader= new FileReader();
    
        reader.onloadend= function(resultFile){
          console.log(resultFile);
          var blob= new Blob([resultFile], {type:"audio/mp3"});
          // uploading to firebase server
          var uploadTask = storageRef.child(filename).put(blob);
          uploadTask.on('state_changed', function(snapshot){
            console.log("state_changed:" + filename + "::::Current State:" +snapshot.state);
          }, function(error) {
            alert("upload error");
          }, function() {
            $scope.downloadURL = uploadTask.snapshot.downloadURL;
          });
        }
        //reading as dataUrl or ArrayBuffer
        reader.readAsDataURL(gotfile);
      })
    });
    
    }

    及下载:

      $scope.downloadFile= function(){
    var ft= new FileTransfer();
    ft.download($scope.downloadURL, baseServ.dirDownloads.nativeURL + $scope.fname, function(entry) {
      // download is successful but unable to play when opening in my device
        console.log("download complete: " + entry.toURL());
    },
    function(error) {
        console.log("download error source " + error.source);
    },
    false,
    {});
    
    }


    谢谢。

    实时数据库是存储音频文件的错误工具。你应该使用Firebase存储。看

    存储和检索用户生成的内容,如图像、音频和视频 直接从Firebase客户端SDK

    在后台进行可靠的上传和下载,不受网络限制 质量安全的客户端授权,与 由谷歌云支持的PB级认证数据存储 通过Firebase或Google云存储API访问存储API


    实时数据库是存储音频文件的错误工具。你应该使用Firebase存储。看

    存储和检索用户生成的内容,如图像、音频和视频 直接从Firebase客户端SDK

    在后台进行可靠的上传和下载,不受网络限制 质量安全的客户端授权,与 由谷歌云支持的PB级认证数据存储 通过Firebase或Google云存储API访问存储API


    似乎你不能上传音频本身

    在我看到的示例中,数据(用于图像文件)以dataURL/Base64字符串的形式上载,文件在下载后重建


    由于我的音频文件很小,大小为60-70 kb,因此我正在使用相同的文件,并使用HTMLAudio元素重新构建该文件。

    您似乎无法上传音频本身

    在我看到的示例中,数据(用于图像文件)以dataURL/Base64字符串的形式上载,文件在下载后重建


    由于我的音频文件很小,大小为60-70 kb,因此我将使用相同的方法,并使用HTMLAudio元素重新构建该文件。

    要提供一种简单的方法,请在程序中使用这两种方法(从下面给出的链接)

    private void startRecording() {
            mRecorder = new MediaRecorder();//mRecoreder has been declared globally
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile(mFileName);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    
            try {
                mRecorder.prepare();
            } catch (IOException e) {
                Log.e(LOG_TAG, "prepare() failed");//initiallize LOG_TAG as a string anything u like to get an indication
            }
    
            mRecorder.start();
        }
    
        private void stopRecording() {
            mRecorder.stop();
            mRecorder.release();
            mRecorder = null;
    
            uploadAudio();//it is'nt in the link. it has been added by me to upload ur audio to firebase storage cloud 
    
        }
    
    现在要上传代码,请添加并调用uploadAudio()方法,其主体是:-

    私有void uploadAudio(){

    mProgressDialog.setMessage(“上载音频…”);//全局声明它,并通过传递当前活动(如
    mProgressDialog.show();
    StorageReference mFilePath=mStorageRef.child(“音频”).child(“新音频.3gp”);
    uriu=Uri.fromFile(新文件(mFileName));
    mFilePath.putFile(u).addOnSuccessListener(新的OnSuccessListener(){
    @凌驾
    成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
    mProgressDialog.disclose();
    mTextView.setText(“音频已成功上传!!!”;
    }
    });
    
    }

    这应该足够简单的音频上传。查看链接以进一步定制。

    要给你一个简单的方法,只需在你的程序中使用这两种方法(从下面给出的链接)

    private void startRecording() {
            mRecorder = new MediaRecorder();//mRecoreder has been declared globally
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile(mFileName);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    
            try {
                mRecorder.prepare();
            } catch (IOException e) {
                Log.e(LOG_TAG, "prepare() failed");//initiallize LOG_TAG as a string anything u like to get an indication
            }
    
            mRecorder.start();
        }
    
        private void stopRecording() {
            mRecorder.stop();
            mRecorder.release();
            mRecorder = null;
    
            uploadAudio();//it is'nt in the link. it has been added by me to upload ur audio to firebase storage cloud 
    
        }
    
    现在要上传代码,请添加并调用uploadAudio()方法,其主体是:-

    私有void uploadAudio(){

    mProgressDialog.setMessage(“上载音频…”);//全局声明它,并通过传递当前活动(如
    mProgressDialog.show();
    StorageReference mFilePath=mStorageRef.child(“音频”).child(“新音频.3gp”);
    uriu=Uri.fromFile(新文件(mFileName));
    mFilePath.putFile(u).addOnSuccessListener(新的OnSuccessListener(){
    @凌驾
    成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
    mProgressDialog.disclose();
    mTextView.setText(“音频已成功上传!!!”;
    }
    });
    
    }

    这应该足够简单的音频上传。查看链接以进一步定制。

    我只使用firebase。我需要上传的mp3文件只作为mp3,而不是blob。有办法吗?Firebase包括Firebase存储。恕我直言,如果您使用实时数据库来存储音频,那么您使用的工具是错误的。正确地说,在与firebase进一步合作后,我可以说实时数据库应该尽可能保持轻。作为一名管理员,这也会给您带来困难。另一方面,存储可以处理繁重的文件。谢谢。我只使用firebase。我需要上传的mp3文件只作为mp3,而不是blob。有办法吗?Firebase包括Firebase存储。恕我直言,如果您使用实时数据库来存储音频,那么您使用的工具是错误的。正确地说,在与firebase进一步合作后,我可以说实时数据库应该尽可能保持轻。作为一名管理员,这也会给您带来困难。另一方面,存储可以处理繁重的文件。谢谢