Android - 将视频/音频文件上传到 Firebase 存储

Posted

技术标签:

【中文标题】Android - 将视频/音频文件上传到 Firebase 存储【英文标题】:Android - Upload video/audio file to Firebase Storage 【发布时间】:2017-11-28 18:05:23 【问题描述】:

我正在使用 Firebase 存储来保存视频/音频用户的文件。 我的主要想法是将每个视频/音频保存在用户 ID (UID) 下。 这意味着每个用户都有几个视频/音频文件保存在他的 UID 下。 我写了一个代码,问题是他一直在我保存的旧视频上保存新视频。 请告诉我哪里错了

   @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 
    if (resultCode == RESULT_OK) 
        if (requestCode == PICK_VIDEO_REQUEST) 
            Uri selectedVideoUri = data.getData();
            String userUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
            StorageReference storageRef = FirebaseStorage.getInstance().getReference();
            videoRef = storageRef.child("/videos/" + userUid );
            //TODO: save the video in the db
            uploadData(selectedVideoUri);
        else if(requestCode == PICK_AUDIO_REQUEST)
            //TODO: save the audio in the db
        
    


private void uploadData(Uri videoUri) 
    if(videoUri != null)
        UploadTask uploadTask = videoRef.putFile(videoUri);

        uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() 
            @Override
            public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) 
                if(task.isSuccessful())
                    Toast.makeText(getContext(), "Upload Complete", Toast.LENGTH_SHORT).show();
                    progressBarUpload.setVisibility(View.INVISIBLE);
            
        ).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() 
            @Override
            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) 
                updateProgress(taskSnapshot);
            
        );
    else 
        Toast.makeText(getContext(), "Nothing to upload", Toast.LENGTH_SHORT).show();
    


【问题讨论】:

【参考方案1】:

对于该用户的上传,您每次都使用相同的文件路径:

videoRef = storageRef.child("/videos/" + userUid);

相反,您需要为每次上传提供一些唯一的文件名,并将用户 ID 视为目录组件,而不是文件本身的名称:

String filename = "you put a unique file name here";
videoRef = storageRef.child("/videos/" + userUid + "/" + filename);

【讨论】:

在同一布局上添加图像、视频和录制视频怎么做【参考方案2】:

您可以使用当前时间来制作这样的唯一ID

    StorageReference videoRef =storageRef.child(System.currentTimeMillis()+userUid+);

通过这样做,您每次都会获得一个唯一的 ID 来保存您的文件。 这对我有用

【讨论】:

以上是关于Android - 将视频/音频文件上传到 Firebase 存储的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像、pdf、音频、视频和任何文件系统从 iphone 本地内存上传到服务器(API)

Android 允许将多个文件(最大 150 MB)上传到 PHP 服务器

从android上传的音频文件在ios中不起作用

如何将音频文件与新的视频文件合并?在 android 中可以吗?

android - 如何混合音频文件和视频文件?

基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)