从URI获取视频文件的完整路径

5

我正在尝试选择一个视频,选择和显示视频都正常,但是当我尝试获取视频文件的完整路径时,我得到了错误的路径。

在下面的代码片段中,我正在尝试获取文件的完整路径:

Uri uri = Uri.parse(url);
File file = new File((uri.getPath()));

当我设置multipart实体的文件主体时,我传递给它file.toString()

当我尝试上传文件时,发生以下异常。

03-28 12:43:27.129: W/System.err(6018): java.io.FileNotFoundException: /content:/media/external/video/media/32398: open failed: ENOENT (No such file or directory)
03-28 12:43:27.157: W/System.err(6018):     at libcore.io.IoBridge.open(IoBridge.java:416)
03-28 12:43:27.157: W/System.err(6018):     at java.io.FileInputStream.<init>(FileInputStream.java:78)
03-28 12:43:27.157: W/System.err(6018):     at org.apache.http.entity.mime.content.FileBody.writeTo(FileBody.java:92)
03-28 12:43:27.165: W/System.err(6018):     at org.apache.http.entity.mime.HttpMultipart.doWriteTo(HttpMultipart.java:206)
03-28 12:43:27.165: W/System.err(6018):     at org.apache.http.entity.mime.HttpMultipart.writeTo(HttpMultipart.java:224)
03-28 12:43:27.169: W/System.err(6018):     at org.apache.http.entity.mime.MultipartEntity.writeTo(MultipartEntity.java:183)
03-28 12:43:27.169: W/System.err(6018):     at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:97)
03-28 12:43:27.169: W/System.err(6018):     at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:162)
3个回答

2

从URI中获取文件路径:

   public String getRealPathFromURI(Context context, Uri contentUri) {
      Cursor cursor = null;
      try { 
        String[] proj = { MediaStore.Images.Media.DATA };
        cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
      } finally {
        if (cursor != null) {
          cursor.close();
        }
      }
    }

2
你需要查询MediaStore.Images.Media.DATA列,使用来自MediaStore.Images.Media ContentProvider的URI获取文件的真实路径。

查看以下帖子以获取“从mediastore获取uri的文件名和路径”:filename and path from uri from mediastore


@user1940676:或者在同一篇帖子中查看Dextor的答案。 - ρяσѕρєя K
我相信这是MediaStore.Videos。 - Thomas Decaux
这是针对视频的,不是图像。 - Wayne Tun

1

我尝试了StackOverflow上所有关于将Uri转换为文件/文件路径的各种答案,但它们都没有起作用。我询问了周围的人,似乎这种行为不再受支持。建议如果您需要访问视频/图像,则直接使用ContentResolver的openInputStream打开URI。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接