2017-05-03 124 views
2

我在挑選文件的文件路徑時遇到了問題,我搜索了所有堆棧溢出,但問題沒有解決。從設備中選擇文件的代碼如下所示。如何從android中的外部存儲獲取文件路徑?

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
      intent.setType("*/*"); 
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
      //intent.addFlags(ST) 
      startActivityForResult(Intent.createChooser(intent, "Choose File to Upload.."), PICK_FILE_REQUEST); 

從意圖拾取文件由

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == PICK_FILE_REQUEST) { 
      if (data != null) { 
       //no data present 
       Uri uri = data.getData(); 
       String filePath = data.getData().getPath(); 
     //  String path = uri.getPath(); 
       file = new File(filePath); 

       String name = getContentName(getContentResolver(), uri); 
       try { 
        InputStream inStream = getContentResolver().openInputStream(uri); 

       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 
       try { 
        bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       LinearLayout linearLayout = new LinearLayout(this); 
       linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
         LinearLayout.LayoutParams.WRAP_CONTENT)); 
       linearLayout.setOrientation(LinearLayout.VERTICAL); 

       ImageView imageView = new ImageView(this); 
       imageView.setImageBitmap(bitmap); 
       attachFile.addView(imageView); 


       TextView textView = new TextView(this); 
       textView.setText(name); 
       attachFile.addView(textView); 

       return; 
      } 

     } 
    } 

}

在上面的代碼文件路徑獲得由`字符串文件路徑= data.getData()獲得的。的getPath() ;但是當上傳文件到服務器異常被拋出像無效的文件和文件。如何從uri獲取文件的正確路徑?

但文件的名稱是通過使用

`public static String getContentName(ContentResolver resolver, Uri uri) { 
     Cursor cursor = resolver.query(uri, null, null, null, null); 
     cursor.moveToFirst(); 
     int nameIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME); 
     if (nameIndex >= 0) { 
      return cursor.getString(nameIndex); 
     } else { 
      return null; 
     } 
    }` 

如何獲得拾取文件正確的文件路徑挑?

回答

1

如何獲取拾取文件的正確文件路徑?

你不知道。沒有文件。 ACTION_GET_CONTENT與文件無關。它與內容有關。

使用ContentResolveropenInputStream()Uri標識的內容一起使用。對於上傳,或者:

  • 給這個InputStream到上傳API,如果它可以從上傳,或

  • 使用InputStreamFileOutputStream一些你控制文件(例如,在getCacheDir() )複製內容,然後從本地副本上傳

相關問題