Javascript 从firebase上传/下载音频
我正在尝试上传音频,稍后再下载。 我正在使用firebase server进行此过程 我有两个疑问。解决任何一个问题都可以解决以下问题: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(){ //
$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进一步合作后,我可以说实时数据库应该尽可能保持轻。作为一名管理员,这也会给您带来困难。另一方面,存储可以处理繁重的文件。谢谢