如何从android中的外部存储中获取所选文件的文件路径?

时间:2017-05-03 13:59:34

标签: android android-intent android-file

我在选择文件的文件路径时遇到了问题,我搜索了整个堆栈溢出但问题没有解决。从设备中挑选文件的代码如下所示。

$("img#itemDetail").attr('src' , $("img#itemDetail").attr('src') + detailUrl);

从意图中挑选的文件来自

 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);

}

在上面的代码文件中,路径是由`String filePath = data.getData()。getPath();获得的。但是当将文件上传到服务器时,异常会像无效的文档和文件一样被抛出。如何从uri获取文件的正确路径?

但是使用

选择文件的名称
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;
           }

       }
   }

如何获取所选文件的正确文件路径?

1 个答案:

答案 0 :(得分:1)

  

如何获取所选文件的正确文件路径?

你不是。没有档案。 ContentResolver与文件几乎没有关系。它与内容有关。

使用openInputStream()Uri来处理InputStream标识的内容。要上传,请:

  • InputStream提供给上传API,如果可以从中上传,或

  • FileOutputStreamgetCacheDir()用于您控制的某个文件(例如,在var splitted = inputString.Split("."); 中)制作内容的副本,然后从本地副本上传