我在选择文件的文件路径时遇到了问题,我搜索了整个堆栈溢出但问题没有解决。从设备中挑选文件的代码如下所示。
$("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;
}
}
}
如何获取所选文件的正确文件路径?
答案 0 :(得分:1)
如何获取所选文件的正确文件路径?
你不是。没有档案。 ContentResolver
与文件几乎没有关系。它与内容有关。
使用openInputStream()
和Uri
来处理InputStream
标识的内容。要上传,请:
将InputStream
提供给上传API,如果可以从中上传,或
将FileOutputStream
和getCacheDir()
用于您控制的某个文件(例如,在var splitted = inputString.Split(".");
中)制作内容的副本,然后从本地副本上传