我是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)
此问题中的任何指针都会有很大帮助。
答案 0 :(得分:0)
但是,在将文件上传到服务器时,我的应用程序正在崩溃,因为我的File对象无法获取文件路径。
您没有收到档案。你得到一个Uri
。 Uri
不是文件。特别是,您获得的Uri
具有content
方案,该方案可以指向相机应用程序希望它指向的任何内容。
使用ContentResolver
和openInputStream()
获取InputStream
标识的内容Uri
。
我在我的活动2代码
中硬编码了这个文件路径
这不是任何Android设备上的有效文件路径。
相反,视频存储在“/ Internal Storage / DCIM / Camera / test.mp4”
中
不,不是。您似乎对某些文件管理器可能会报告Android设备本身实际使用的内容感到困惑。
使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
获取设备自己的文件系统路径,该路径应映射到您看到的DCIM/
目录。