问题
I am facing the issues in picking the file path of the file, i searched for all over the stack overflow but the issue is not solved .Code for picking the files from the device is shown below.
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);
The picked files from intent are get by
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;
}
}
}
}
In the above code file path is obtained by the ` String filePath = data.getData().getPath(); but when uploading the files to the server exception is thrown like invalid document and file .How to get the correct path of the file from the uri ?
But the name of the file is picked by using
`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;
}
}`
How to get the correct file path for the picked file ?
回答1:
How to get the correct file path for the picked file ?
You don't. There is no file. ACTION_GET_CONTENT
has little to do with files. It has everything to do with content.
Use ContentResolver
and openInputStream()
to work with the content identified by the Uri
. For uploading, either:
Give the
InputStream
to the uploading API, if it can upload from that, orUse the
InputStream
and aFileOutputStream
to some file that you control (e.g., ingetCacheDir()
) to make a copy of the content, then upload from your local copy
来源:https://stackoverflow.com/questions/43762230/how-to-get-the-file-path-for-the-picked-files-from-the-external-storage-in-andro