java - 我想从 firebase 存储中检索视频

标签 java android firebase firebase-storage

我正在开发简单的 Firebase 应用程序,其中我上传用户信息作为注册数据并上传存储中的视频。视频路径也存储在实时数据库中,作为每个正常工作的特定用户的嵌套子级,但我不知道如何检索视频并在用户配置文件中设置其他用户信息。我需要代码来从存储中检索视频。

     case PICK_VIDEO_REQUEST:
            if (resultCode == RESULT_OK) {


                selectedVideoUri = data.getData();
               userUid = FirebaseAuth.getInstance().getCurrentUser().getEmail();
                StorageReference storageRef = FirebaseStorage.getInstance().getReference();
                filename = data.getData().getLastPathSegment();
                tv_file_path.setText(filename);
                videoRef = storageRef.child("/videos/" + userUid + "/" + filename);
                //TODO: save the video in the db


            }
            break;




`//Button upload data in firebase
    btn_upload_notes.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            uploadData(selectedVideoUri);


                           try {
                               if (FirebaseAuth.getInstance().getCurrentUser().getEmail().equals(value.getT_email())) {

                                   file_name = filename;
                                   notes_Category = text;
                                   lecture_topic = et_topic.getText().toString().trim();
                                   id = mDatabase.push().getKey();
                                   NotesModelClass notesModelClass = new NotesModelClass(id, notes_Category, lecture_topic, file_name);
                                   mDatabase.child(value.getT_id()).child("Video Notes").child(id).setValue(notesModelClass);
                                   return;
                               }
                           }
                           catch (Exception ex){
                               throw  ex;
                           }

        }
    });

`

     private void uploadData(Uri videoUri) {
    if (videoUri != null) {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();
        UploadTask uploadTask = videoRef.putFile(videoUri);

        uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                if (task.isSuccessful())
                    progressDialog.dismiss();
                Toast.makeText(MainActivity.this, "Upload Complete", Toast.LENGTH_SHORT).show();

            }
        }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot
                        .getTotalByteCount());
                progressDialog.setMessage("Uploaded " + (int) progress + "%");
            }
        });
    } else {
        Toast.makeText(MainActivity.this, "Nothing to upload", Toast.LENGTH_SHORT).show();
    }

}

最佳答案

试试这个代码

检索单个视频。

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

final long ONE_MEGABYTE = 1024 * 1024;
videoRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
    @Override
    public void onSuccess(byte[] bytes) {
        // Transform bytes to a video, play
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle any errors
    }
});

检索多个视频

 StorageTask<UploadTask.TakeSnapshot> storageTask;
        storageTask = yourStorageRefernce.putFile(videoUri);
        storageTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
            @Override
            public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                if (!task.isSuccessful()) {
                    throw task.getException();
                }
                return yourStorageRefernce.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult();
                    arrayList.add(downloadUri.toString());
                }
            }
        });

关于java - 我想从 firebase 存储中检索视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55161054/

相关文章:

java - 如何在 ContainerRequestFilter 中检索请求的匹配资源

java - Android - 从 fragment 调用函数

java - 有什么方法可以流式传输像 "(k,v)"这样的 map 而不是使用(条目)?

android - 我怎样才能得到 "network"时间,(从 "Automatic"设置称为 "Use network-provided values"),而不是电话上的时间?

ios - 如何存储 Firebase 数据以便在 Swift 中轻松快速地访问

FirebaseUI-web : no recognised user after account login

android - 使用两个 sha1 key 在 Play 商店中发布后,Google 登录无法正常工作

java导入子目录

android - Firebase Cloud Messaging (FCM) 不止一行

android - 在android中的 ListView 中创建动态 TextView