如何将音频(3gp)文件上传到 Firebase 存储?

Posted

技术标签:

【中文标题】如何将音频(3gp)文件上传到 Firebase 存储?【英文标题】:How to upload audio (3gp) file to firebase storage? 【发布时间】:2020-09-08 01:46:53 【问题描述】:

编辑:我在参考末尾添加了“recRef”“.3gp”,现在当我使用模拟器时,它上传为 0KB 的 .3gp 文件,外部设备仍上传“应用程序/八位字节流”文件(重量 0KB)。

我对我的应用进行了记录活动,但我无法将其正确上传到 Firebase 存储。 我尝试根据谷歌发布的图像上传示例构建一个上传过程,它上传一个空文件(0KB,输入“application/octet-stream”)。 录制过程运行良好,我制作了一个播放按钮来检查它,所以我知道这只是一个问题,我不知道如何将其正确上传到云端。

欢迎大家使用我的 git 弹出记录活动:https://github.com/tidharon/Popup-Record-Window-App

这是我的上传代码:

recRef = storage.getReference(lastAct + " Records").child(lastTitle);
                metadata = new StorageMetadata.Builder().setCustomMetadata(lastID, outputFile).build();


                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                byte[] daata = baos.toByteArray();
                uploadTask = (UploadTask) recRef.putBytes(daata, metadata).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() 
                    @Override
                    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) 
                        recURL = recRef.toString();
                        getIntent().putExtra("recURL", recURL);
                    
                );

recRef 是一个 StorageReference 元素。 元数据是一个 StorageMetadate 元素。 lastID 是连接到记录的文本文档的 ID。 outputFile 是存放记录的目录

这是录制过程的准备工作:

outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + ("/" + lastAct + " | " + lastID + " | " + date + ".3gp");
    myAudioRecorder = new MediaRecorder();
    myAudioRecorder.setAudiosource(MediaRecorder.AudioSource.MIC);
    myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    myAudioRecorder.setOutputFile(outputFile);

提前致谢!

【问题讨论】:

录制完成后尝试上传文件.putFile(uri_path) 我试过了,还是没有上传任何文件 【参考方案1】:

使用此检查导致问题的原因

.addOnFailureListener(new OnFailureListener() 
                        @Override
                        public void onFailure(@NonNull Exception e) 
                            Toast.makeText(MyContext, e.toString(), Toast.LENGTH_LONG).show();
                        
                    )

在您的代码中关闭 addOnCompleteListener 之后

【讨论】:

它不会失败,只是不要将任何文件上传到存储,除了文件名并将文件视为“application/octet-stream”。

以上是关于如何将音频(3gp)文件上传到 Firebase 存储?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SD 卡上的 3gp 文件上传到服务器?

如何使用 Swift 5 /SwiftUI 将 AVAudioRecorder 文件上传到 Firebase 存储?

如何在android中处理音频(.3gp)文件[关闭]

将.3gp文件写入.wav格式python Flask服务器

3GP有没有能转换音频和视频的

将文件上传到 Firebase 后如何获取文件 URL?