4

ビデオを選択しようとすると、ビデオの選択と表示は正常に機能しますが、ビデオ ファイルへのフル パスを取得しようとすると、間違ったパスが取得されます。

次のコード フラグメントでは、ファイルへのフル パスを取得しようとしています。

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

そして、マルチパート エンティティ ファイルボディを設定するときに、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)
4

3 に答える 3

3

ContentProviderMediaStore.Images.Media.DATAからの URI を使用してファイルの実際のパスを取得するには、列を照会する必要があります。MediaStore.Images.Media

mediastore の uri からファイル名とパスを取得するには、次の投稿を参照してください。

于 2013-03-28T11:05:45.767 に答える
1

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();
        }
      }
    }
于 2015-12-10T06:18:00.457 に答える
0

Uris を取得してファイル/ファイル パスに変換することに関して、StackOverflow でさまざまな回答をすべて試しましたが、どれも機能しませんでした。いろいろ聞いてみたところ、この動作はサポートされていないようです。代わりに、ビデオ/画像へのアクセスが必要な場合は、「ContentResolver の openInputStream を使用して URI を直接開くだけ」が提案されました。

于 2017-05-30T23:57:16.203 に答える