You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin实现指定路径自动选视频并上传Firebase

无需手动选择,通过指定路径上传本地视频到Firebase

权限准备

首先要确保App拥有访问本地存储的权限:

  • Android 10及以下:在AndroidManifest.xml中添加<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />,并在运行时主动申请权限
  • Android 11+:若访问公共媒体目录(如DCIM、Download),可使用分区存储API;若需访问任意路径,需添加<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />并引导用户开启权限
  • Android 13+:可使用更细分的READ_MEDIA_VIDEO权限替代旧的存储权限

核心实现代码

直接指定视频路径获取文件,然后上传至Firebase Storage:

// 指定本地视频的绝对路径
String targetVideoPath = "/sdcard/DCIM/Camera/test_video.mp4";
File videoFile = new File(targetVideoPath);

// 先校验文件有效性
if (videoFile.exists() && videoFile.canRead()) {
    // 获取Firebase Storage的根引用,自定义存储路径(这里存到uploaded_videos目录下)
    StorageReference storageRoot = FirebaseStorage.getInstance().getReference();
    StorageReference targetVideoRef = storageRoot.child("uploaded_videos/" + videoFile.getName());

    // 发起文件上传任务
    UploadTask uploadTask = targetVideoRef.putFile(Uri.fromFile(videoFile));

    // 监听上传状态
    uploadTask.addOnSuccessListener(taskSnapshot -> {
        // 上传成功后,可获取视频的下载URL
        targetVideoRef.getDownloadUrl().addOnSuccessListener(downloadUri -> {
            String videoUrl = downloadUri.toString();
            // 此处可将URL存入Firebase Database或做其他业务处理
        });
    }).addOnFailureListener(error -> {
        // 上传失败时处理错误
        Log.e("FirebaseUpload", "视频上传失败: " + error.getMessage());
    }).addOnProgressListener(snapshot -> {
        // 监听上传进度(可选)
        double progressPercent = (100.0 * snapshot.getBytesTransferred()) / snapshot.getTotalByteCount();
        Log.d("FirebaseUpload", "当前上传进度: " + String.format("%.1f", progressPercent) + "%");
    });
} else {
    Log.e("FileCheck", "指定路径的视频不存在或无读取权限");
}

替换原手动选择逻辑

把你原来的手动选择代码替换成上面的自动获取+上传逻辑即可,原代码参考:

Intent intent = new Intent();
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Video"), REQUEST_TAKE_GALLERY_VIDEO);

额外提示

  • 建议通过Environment类获取标准存储目录,避免硬编码路径出错,比如Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
  • 大视频上传建议放在后台线程或使用WorkManager执行,避免阻塞主线程导致ANR

内容的提问来源于stack exchange,提问作者Hassaan Zahid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:20:43