2017-01-27 2 views
0

からビデオを選択:5312 と 内容://com.android.providers.media.documents/document/video%3A5312ファイルが見つかりません...私は /文書/ビデオの両方を持っているギャラリー

ギャラリーから選択したビデオファイルに「URI」または「絶対パス」として入力し、新しいFile()にフィードします。

File selectedFile = new File(selectedFilePath); 

上位URI /パスの両方を試してみましたが、うまく動作しません。 は、ではありません。ファイルはではなく、が見つかりました。

File()にはどのような形式が必要ですか? このパスは有効です。 File()でそれを開くにはどうすればよいですか?

+0

あなたの質問はとても曖昧です –

+0

これは少し良いですか? –

+0

私は実際にあなたが望むものを手に入れませんでしたか? –

答えて

2

"URI" またはIギャラリー

から選択されたビデオファイルを "絶対パス" は、それらはUri値です。ファイルシステムのパスではなく、ファイルシステムのパスを取得することもできません。

ファイルが見つかりませんでした。

これはファイルではないためです。 content://com.android.providers.media.documents/document/video%3A5312contentであり、fileではありません。

https://stackoverflow.com/questions/41900707/file-not-found-selecting-a-video-from-galleryはファイルではありません。Uriのスキームはhttpsです。

File()でどのように開くのですか?

https://stackoverflow.com/questions/41900707/file-not-found-selecting-a-video-from-galleryを開くと、Fileが表示されます。

代わりに、you use ContentResolver and openInputStream() to get an InputStream on the content identified by the Uri、ちょうどあなたがhttpsUriInputStreamを取得するためにOkHttpまたはHttpUrlConnectionを使用することがありますよう。

+0

この方法でファイルをアップロードする例を手伝ってもらえますか?私はGoogleのXamarinで1つしか見つかりませんでした。 –

+0

@DavidKachlon:まあ、HTTP操作を再開する必要がある場合に備えて、純粋に 'InputStream'で動作するHTTPクライアントAPIはほとんどありません。選択したHTTP APIが 'InputStream'をサポートしているかどうかを確認する必要があります(たとえば、OkHttpはそうではありません)。もしそうなら、素晴らしい。もしそうでなければ、 'FileOutputStream'をどこかでオープンしてください。、 'getCacheDir()')、 'InputStream'から' FileOutputStream'にバイトをコピーします。その後、コンテンツのコピーをファイルとして使用し、完了したら削除することができます。 – CommonsWare

0

ありがとうございました。ここで

は私が管理するものです....

String[] perms = {"android.permission. WRITE_EXTERNAL_STORAGE"}; 

    int permsRequestCode = 200; 

    requestPermissions(perms, permsRequestCode); 



    public void convertFile(Uri urx) 
     throws IOException { 

    ContentResolver test = getContentResolver(); 
    InputStream initialStream = test.openInputStream(urx); 


    byte[] buffer = new byte[initialStream.available()]; 
    initialStream.read(buffer); 

    File xpath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES); 


    File targetFile = new File(xpath, "/test.mp4"); 
    OutputStream outStream = new FileOutputStream(targetFile); 
    outStream.write(buffer); 
    uploadFile(targetFile.getPath()); 

} 

@Override 
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){ 

    switch(permsRequestCode){ 

     case 200: 

      boolean writeAccepted = grantResults[0]== PackageManager.PERMISSION_GRANTED; 

      break; 

    } 

} 

私は私の.MP4ファイルを書き込もうとするとEACESエラーが発生します。 「メモリに書き込む」方法はありますか?あるいは、あなたはこの問題を解決することができます。

関連する問題