由于安全和隐私的原因,Android 8以上的版本不再支持通过ASP文件上传控件直接上传文件。相反,Android应用程序应使用Android的文件选择器来选择要上传的文件,然后将文件发送到服务器。
以下是一个示例代码,展示了如何在Android应用程序中使用文件选择器选择文件并将其上传到服务器:
...
...
private static final int PICK_FILE_REQUEST_CODE = 1;
private void pickFile() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent, "Select File"), PICK_FILE_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_FILE_REQUEST_CODE && resultCode == RESULT_OK) {
if (data != null) {
Uri fileUri = data.getData();
String filePath = getFilePathFromUri(fileUri);
// 将文件上传到服务器
uploadFile(filePath);
}
}
}
private String getFilePathFromUri(Uri uri) {
String filePath = null;
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
filePath = cursor.getString(column_index);
cursor.close();
}
return filePath;
}
private void uploadFile(String filePath) {
// 将文件上传到服务器的代码
}
在上面的示例中,pickFile()方法将触发文件选择器,用户可以从文件系统中选择要上传的文件。选择的文件将通过onActivityResult()方法返回。然后,可以使用getFilePathFromUri()方法获取文件的实际路径,并使用uploadFile()方法将文件上传到服务器。
请注意,为了使文件选择器正常工作,您的应用程序必须具有读取外部存储的权限。这在AndroidManifest.xml文件中的权限部分已经添加。