2016-08-02 23 views
0

私はオーディオをアップロードして後でダウンロードしようとしています。 私はこのプロセスにfirebaseサーバを使用しています。firebaseからオーディオをアップロード/ダウンロード

私には2つの質問があります。いずれかの方に解決策があれば、目的を解決できます。

  1. blobの代わりにファイルとしてファイルをアップロードする方法。私は、最初にファイルをblobに変換してアップロードするのではなく、そのままファイルをアップロードする方法があるはずだと信じています(これは私が今やっていることです)。
  2. ファイルをダウンロードできましたが、再生できませんでした。ファイルが最初に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, 
{}); 

}

感謝。

答えて

4

リアルタイムデータベースは、オーディオファイルを格納するための間違ったツールです。そのためにFirebase Storageを使用する必要があります。 Firebase Featuresを参照してください。

イメージ、オーディオ、ビデオなどのユーザ生成コンテンツをFirebaseクライアントSDKから直接保存して取得します。 バックグラウンドで

堅牢なアップロードとダウンロードにかかわらず、Firebaseや、GoogleクラウドストレージAPIの全体でGoogleクラウド ストレージAPIへのアクセスに裏打ちされた 認証ペタバイト規模のデータストレージと統合ネットワーク 品質セキュアなクライアントサイドの承認、の

+0

火災ベースのみを使用しています。 mp3ファイルをblobとしてではなくmp3としてアップロードする必要があります。方法はありますか? – Aashish

+1

FirebaseにはFirebase Storageが含まれています。リアルタイムデータベースを使用してオーディオを保存する場合は、間違ったツールを使用していることに注意してください。 –

+0

ファイアーベースでさらに作業した後、私はリアルタイムDBをできるだけ軽く保つべきだと言うことができます。管理者としても苦労します。一方、ストレージは重量のあるファイルで再生できます。 おかげさまで – Aashish

0

オーディオ自体はアップロードできません。

例では、データ(画像ファイル用)はdataURL/Base64文字列の形式でアップロードされ、ダウンロード後にファイルが再構築されます。

私のオーディオファイルは60-70 KBと小さいので、同じものを使用してHTMLAudio要素でファイルを再構築しています。

0

あなたのプログラムでこれらの2つの方法(下記のリンクから)を使用するだけです。コードをアップロードする

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(メソッドを呼び出して追加)とそのボディは以下のとおりです。 -

ます。private void uploadAudio(){

mProgressDialog.setMessage("Uploading Audio...");//declare it globally and initialize it with passing the current activity i.e this 
mProgressDialog.show(); 

StorageReference mFilePath = mStorageRef.child("Audio").child("new_audio.3gp"); 

Uri u = Uri.fromFile(new File(mFileName)); 
mFilePath.putFile(u).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
    @Override 
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

     mProgressDialog.dismiss(); 
     mTextView.setText("Audio has been Uploaded Successfully !!!"); 
    } 
}); 

}

この単純なオーディオのアップロードに十分なはずです。さらなるカスタマイズのためのリンクを確認してください。 https://developer.android.com/guide/topics/media/mediarecorder.html

関連する問題