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

时间:2017-11-28 18:05:23

标签: android firebase firebase-storage

我使用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();
    }

}

2 个答案:

答案 0 :(得分:4)

对于该用户的上传,您每个时间使用相同的文件路径

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

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

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

答案 1 :(得分:0)

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

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

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