【问题标题】:How can I upload videos in Firebase Storage?如何在 Firebase 存储中上传视频?
【发布时间】:2021-04-26 06:20:48
【问题描述】:

我正在尝试将一些图片和视频从图库上传到 Firebase 存储。我试过对于图像我没有问题,但对于视频是的。我尝试了在谷歌上找到的几个教程,但没有一个奏效。 我该怎么办?这是我目前写的代码:

public class GalleryActivity extends AppCompatActivity {

    private Button chooseImage;
    private Button chooseVideo;
    private Button sendToCloud;
    private ImageView selectedImage;
    private VideoView selectedVideo;
    private TextView txtDescription;

    private static final int PICK_IMAGE = 100;
    private static final int PICK_VIDEO = 200;

    private Uri mImageUri;

    //Firebase stuff
    private FirebaseStorage storage;
    private StorageReference storageReference;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        txtDescription = findViewById(R.id.diplay);
        selectedImage = findViewById(R.id.image_taken);
        selectedVideo = findViewById(R.id.video_taken);
        chooseImage = findViewById(R.id.imageBtn);
        chooseVideo = findViewById(R.id.videoBtn);
        sendToCloud = findViewById(R.id.send_to_cloud);

        // get the Firebase  storage reference
        storage = FirebaseStorage.getInstance();
        storageReference = storage.getReference();

        chooseImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                chooseImageFromGallery();
            }
        });

        chooseVideo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                chooseVideoFromGallery();
            }
        });

        sendToCloud.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(selectedImage.getDrawable() != null) {
                    uploadImage();
                }
                //check if videoview is empty and call uploadVideo()
            }
        });
    }


    private void chooseVideoFromGallery() {
        Intent i = new Intent();
        i.setType("video/*");
        i.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(i, "choose App"), PICK_VIDEO);
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && data != null) {
            if (requestCode == PICK_IMAGE) {// img from gallery
                previewImage(data);
            } else if (requestCode == PICK_VIDEO) {
                previewVideo(data);
            }
        }
    }

private void previewVideo() {
        try {
            txtDescription.setVisibility(View.GONE);
            selectedImage.setVisibility(View.GONE);

            selectedVideo.setVisibility(View.VISIBLE);
            selectedVideo.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void previewImage(Intent data) {
        try {
            txtDescription.setVisibility(View.GONE);
            selectedVideo.setVisibility(View.GONE);

            selectedImage.setVisibility(View.VISIBLE);
            Uri imgUri = data.getData();
            InputStream imageStream = GalleryActivity.this.getContentResolver().openInputStream(imgUri);//2
            Bitmap selectedImageBitmap = BitmapFactory.decodeStream(imageStream);//3}
            mImageUri = imgUri;
            selectedImage.setImageBitmap(selectedImageBitmap);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

提前感谢大家

【问题讨论】:

    标签: android firebase-storage


    【解决方案1】:

    这是工作代码:

    if (resultCode == RESULT_OK) {
        if (requestCode == PICK_VIDEO) {
            Uri videoUri= data.getData();
            String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
            StorageReference storageRef = FirebaseStorage.getInstance().getReference();
            String filename = "give a unique filename for each";
            videoRef = storageRef.child("/videos/" + uid+ "/" + filename);
           
    
            uploadVideo(videoUri);
    
        }
    }
    

    在此处上传视频:

    private void uploadVideo(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(), "Video Upload Completed", Toast.LENGTH_SHORT).show();
            }
        }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                updateProgress(taskSnapshot);
            }
        });
    }else {
        Toast.makeText(getContext(), "upload failed!", Toast.LENGTH_SHORT).show();
    }
    
    }
    
    // StorageReference videoRef;
    

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2019-01-20
    • 2019-04-04
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 2021-01-18
    • 2020-01-26
    • 1970-01-01
    • 2016-10-20
    相关资源
    最近更新 更多