从Intent传递到onActivityResult()获取视频路径时发现文件未找到异常

时间:2018-05-03 18:41:53

标签: android

我是android编程的新手,需要帮助解决这个问题,我在捕获视频文件并将其上传到服务器上时遇到了这个问题。 我的活动1从使用原生视频捕获开始 -

private void recordVideo(){
    Intent takeVideoIntent = new 
    Intent(MediaStore.ACTION_VIDEO_CAPTURE);

    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
    }
}

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
  if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
    Uri videoUri = intent.getData();
    mVideoView.setVideoURI(videoUri);
    Log.d("Getting video path ", videoUri.getPath() );
  }
}

我通过将意图传递给活动2来上传到服务器。但是,在将文件上传到服务器时,我的应用程序正在崩溃,因为我的File对象无法获取文件路径。 我正在记录的文件路径示例是 - 的 /外部/视频/媒体/ 18518 即可。 我没有使用任何外部存储器,当我浏览我正在使用文件浏览器测试它的Lenovo K4音符时,该文件不存在于

/ external / video / media目录。而是视频存储在

“/ Internal Storage / DCIM / Camera / test.mp4”

作为一种解决方法,我在我的活动2代码中硬编码了这个文件路径,该代码正在读取文件并将其上传到服务器但仍然没有找到文件异常 -

            int readedBytes;
            byte[] buf = new byte[1024];
            File file = new File("/Internal Storage/DCIM/Camera/test.mp4");
            InputStream insputStream = new FileInputStream(file);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();

            long length = file.length();
            byte[] bytes = new byte[(int) length];
            insputStream.read(bytes);
            while((readedBytes = insputStream.read(buf)) >0 ){
                bos.write(buf, 0, readedBytes);
            }
            insputStream.close();


java.io.FileNotFoundException: /Internal Storage/DCIM/Camera/test.mp4: open failed: ENOENT (No such file or directory)
05-04 00:06:14.432 23628-24496/com.example.jayant.healthapp W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:496)
05-04 00:06:14.433 23628-24496/com.example.jayant.healthapp W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:76)

此问题中的任何指针都会有很大帮助。

1 个答案:

答案 0 :(得分:0)

  

但是,在将文件上传到服务器时,我的应用程序正在崩溃,因为我的File对象无法获取文件路径。

您没有收到档案。你得到一个UriUri不是文件。特别是,您获得的Uri具有content方案,该方案可以指向相机应用程序希望它指向的任何内容。

使用ContentResolveropenInputStream()获取InputStream标识的内容Uri

  

我在我的活动2代码

中硬编码了这个文件路径

这不是任何Android设备上的有效文件路径。

  

相反,视频存储在“/ Internal Storage / DCIM / Camera / test.mp4”

不,不是。您似乎对某些文件管理器可能会报告Android设备本身实际使用的内容感到困惑。

使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)获取设备自己的文件系统路径,该路径应映射到您看到的DCIM/目录。