FileNotFoundException 打开失败:ENOENT(没有这样的文件或目录),同时通过三星设备上传任何类型的文件
FileNotFoundException open failed: ENOENT (No such file or directory) while upload any type of file by Samsung devices
我想通过从文件管理器中选择文件来将文件上传到服务器所以我使用此代码单击按钮打开了文件管理器,
button_upload_attachment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String[] galleryPermissions = {android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (EasyPermissions.hasPermissions(CIBILCaptureandUPLOAD.this, galleryPermissions)) {
Intent intent = new Intent();
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 1);
} else {
EasyPermissions.requestPermissions(this, "Access for storage",
101, galleryPermissions);
}
}
});
和 onActivityResult 方法我做了类似的事情来获取文件的路径并使 UploadToserver 函数用于上传
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//ImagesData = data;
try {
// When an Image is picked
if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK
&& null != data) {
Uri contentUri=data.getData();
Log.e("bbbbbbbbbbbbbb", contentUri.toString());
if(contentUri.toString().endsWith(".png")||contentUri.toString().endsWith("jpg") ||
contentUri.toString().endsWith(".pdf")){
photoFile= new File(contentUri.getPath());
if (photoFile.exists()) {
Log.e("photoFile", "File Exists");
}
if (photoFile != null) {
new AsyncTask<String, String, File>() {
ProgressDialog pd;
@Override
protected void onPreExecute() {
pd = ProgressDialog.show(CIBILCaptureandUPLOAD.this, "", "Compressing...");
Log.e("PreExecute", "Compressing");
}
@Override
protected File doInBackground(String[] params) {
return photoFile;
}
@Override
protected void onPostExecute(File result) {
pd.dismiss();
if (result != null) {
new CIBILCaptureandUPLOAD.UploadFileToServer().execute(result);
}
}
}.execute("");
}
}else {
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(contentUri,
filePathColumn, null, null, null);
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = "";
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
Log.e("PATH", filePath);
photoFile = new File(filePath);
if (photoFile.exists()) {
Log.e("photoFile", "File Exists");
}
if (photoFile != null) {
new AsyncTask<String, String, File>() {
ProgressDialog pd;
@Override
protected void onPreExecute() {
pd = ProgressDialog.show(CIBILCaptureandUPLOAD.this, "", "Compressing...");
Log.e("PreExecute", "Compressing");
}
@Override
protected File doInBackground(String[] params) {
return photoFile;
}
@Override
protected void onPostExecute(File result) {
pd.dismiss();
if (result != null) {
new CIBILCaptureandUPLOAD.UploadFileToServer().execute(result);
}
}
}.execute("");
}
}
}
它在其他设备上运行良好,但在三星设备上我有
java.io.FileNotFoundException: /document/primary:Xender/other/When Strangers Meet_ 3 in 1 Box - John Harker.pdf: open failed: ENOENT (No such file or directory)
我的上传代码是
私有 class UploadFileToServer 扩展 AsyncTask {
private static final String TAG = "UploadFileToServer";
// private ProgressBar progressBar;
// private String filePath = null;
// private TextView txtPercentage;
private ProgressDialog pd;
long totalSize = 0;
@Override
protected void onPreExecute() {
// setting progress bar to zero
// progressBar.setProgress(0);
pd = ProgressDialog.show(CIBILCaptureandUPLOAD.this, "", "Loading...");
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... progress) {
// Making progress bar visible
// progressBar.setVisibility(View.VISIBLE);
// updating progress bar value
pd.setMessage("Loading..." + progress[0]);
// progressBar.setProgress(progress[0]);
// updating percentage value
// txtPercentage.setText(String.valueOf(progress[0]) + "%");
}
@Override
protected String doInBackground(File... params) {
return uploadFile1(params[0]);
}
@SuppressWarnings("deprecation")
private String uploadFile1(File file) {
String responseString = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(AppUtill.URL_CIBIL_imageupload);
try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
new AndroidMultiPartEntity.ProgressListener() {
@Override
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
File sourceFile = file;// new File(filePath);
entity.addPart("image", new FileBody(sourceFile));
entity.addPart("mid", new StringBody(memberid));
entity.addPart("did", new StringBody("0"));
entity.addPart("fid", new StringBody(formtypeid));
if (app_loadid == null) {
SharedPreferences sharedPreferences = getSharedPreferences("LID", MODE_PRIVATE);
app_loadid = sharedPreferences.getString("lid", "");
entity.addPart("lid", new StringBody(app_loadid));
} else {
entity.addPart("lid", new StringBody(app_loadid));
}
totalSize = entity.getContentLength();
httppost.setEntity(entity);
// Making server call
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("statusCode +statusCode");
if (statusCode == 200) {
// Server response
System.out.println("statusCode +statusCode");
responseString = EntityUtils.toString(r_entity);
String success = String.valueOf(responseString.contains("1"));
if (success.matches("true")) {
uploadedFileCount++;
} else {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "File not uploaded. Please upload again...", Toast.LENGTH_SHORT).show();
}
});
}
} else {
responseString = "Error occurred! Http Status Code: " + statusCode;
}
} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
Log.e(TAG, "Response from server: " + result);
pd.dismiss();
if (uploadedFileCount == MAX_COUNT) {
AlertDialog.Builder alert = new AlertDialog.Builder(CIBILCaptureandUPLOAD.this);
alert.setTitle(R.string.app_name);
alert.setMessage("Reach to max upload limit");
alert.setCancelable(false);
alert.setPositiveButton("OK", null);
alert.create().show();
}
// showing the server response in an alert dialog
showAlert(result);
AppUtill.deleteFolderAndAllFile(CIBILCaptureandUPLOAD.this);
super.onPostExecute(result);
}
}
photoFile= new File(contentUri.getPath());
查看 contentUri.getPath()
的值,发现它不是有效的文件系统路径。
相反,您应该为获得的 uri 打开一个 InputStream 并从流中读取文件内容。
InputStream is = getContentResolver().openInputStream(contentUri);
我想通过从文件管理器中选择文件来将文件上传到服务器所以我使用此代码单击按钮打开了文件管理器,
button_upload_attachment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String[] galleryPermissions = {android.Manifest.permission.READ_EXTERNAL_STORAGE, android.Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (EasyPermissions.hasPermissions(CIBILCaptureandUPLOAD.this, galleryPermissions)) {
Intent intent = new Intent();
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 1);
} else {
EasyPermissions.requestPermissions(this, "Access for storage",
101, galleryPermissions);
}
}
});
和 onActivityResult 方法我做了类似的事情来获取文件的路径并使 UploadToserver 函数用于上传
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//ImagesData = data;
try {
// When an Image is picked
if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK
&& null != data) {
Uri contentUri=data.getData();
Log.e("bbbbbbbbbbbbbb", contentUri.toString());
if(contentUri.toString().endsWith(".png")||contentUri.toString().endsWith("jpg") ||
contentUri.toString().endsWith(".pdf")){
photoFile= new File(contentUri.getPath());
if (photoFile.exists()) {
Log.e("photoFile", "File Exists");
}
if (photoFile != null) {
new AsyncTask<String, String, File>() {
ProgressDialog pd;
@Override
protected void onPreExecute() {
pd = ProgressDialog.show(CIBILCaptureandUPLOAD.this, "", "Compressing...");
Log.e("PreExecute", "Compressing");
}
@Override
protected File doInBackground(String[] params) {
return photoFile;
}
@Override
protected void onPostExecute(File result) {
pd.dismiss();
if (result != null) {
new CIBILCaptureandUPLOAD.UploadFileToServer().execute(result);
}
}
}.execute("");
}
}else {
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(contentUri,
filePathColumn, null, null, null);
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = "";
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
Log.e("PATH", filePath);
photoFile = new File(filePath);
if (photoFile.exists()) {
Log.e("photoFile", "File Exists");
}
if (photoFile != null) {
new AsyncTask<String, String, File>() {
ProgressDialog pd;
@Override
protected void onPreExecute() {
pd = ProgressDialog.show(CIBILCaptureandUPLOAD.this, "", "Compressing...");
Log.e("PreExecute", "Compressing");
}
@Override
protected File doInBackground(String[] params) {
return photoFile;
}
@Override
protected void onPostExecute(File result) {
pd.dismiss();
if (result != null) {
new CIBILCaptureandUPLOAD.UploadFileToServer().execute(result);
}
}
}.execute("");
}
}
}
它在其他设备上运行良好,但在三星设备上我有
java.io.FileNotFoundException: /document/primary:Xender/other/When Strangers Meet_ 3 in 1 Box - John Harker.pdf: open failed: ENOENT (No such file or directory)
我的上传代码是
私有 class UploadFileToServer 扩展 AsyncTask { private static final String TAG = "UploadFileToServer";
// private ProgressBar progressBar;
// private String filePath = null;
// private TextView txtPercentage;
private ProgressDialog pd;
long totalSize = 0;
@Override
protected void onPreExecute() {
// setting progress bar to zero
// progressBar.setProgress(0);
pd = ProgressDialog.show(CIBILCaptureandUPLOAD.this, "", "Loading...");
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... progress) {
// Making progress bar visible
// progressBar.setVisibility(View.VISIBLE);
// updating progress bar value
pd.setMessage("Loading..." + progress[0]);
// progressBar.setProgress(progress[0]);
// updating percentage value
// txtPercentage.setText(String.valueOf(progress[0]) + "%");
}
@Override
protected String doInBackground(File... params) {
return uploadFile1(params[0]);
}
@SuppressWarnings("deprecation")
private String uploadFile1(File file) {
String responseString = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(AppUtill.URL_CIBIL_imageupload);
try {
AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
new AndroidMultiPartEntity.ProgressListener() {
@Override
public void transferred(long num) {
publishProgress((int) ((num / (float) totalSize) * 100));
}
});
File sourceFile = file;// new File(filePath);
entity.addPart("image", new FileBody(sourceFile));
entity.addPart("mid", new StringBody(memberid));
entity.addPart("did", new StringBody("0"));
entity.addPart("fid", new StringBody(formtypeid));
if (app_loadid == null) {
SharedPreferences sharedPreferences = getSharedPreferences("LID", MODE_PRIVATE);
app_loadid = sharedPreferences.getString("lid", "");
entity.addPart("lid", new StringBody(app_loadid));
} else {
entity.addPart("lid", new StringBody(app_loadid));
}
totalSize = entity.getContentLength();
httppost.setEntity(entity);
// Making server call
HttpResponse response = httpclient.execute(httppost);
HttpEntity r_entity = response.getEntity();
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("statusCode +statusCode");
if (statusCode == 200) {
// Server response
System.out.println("statusCode +statusCode");
responseString = EntityUtils.toString(r_entity);
String success = String.valueOf(responseString.contains("1"));
if (success.matches("true")) {
uploadedFileCount++;
} else {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "File not uploaded. Please upload again...", Toast.LENGTH_SHORT).show();
}
});
}
} else {
responseString = "Error occurred! Http Status Code: " + statusCode;
}
} catch (ClientProtocolException e) {
responseString = e.toString();
} catch (IOException e) {
responseString = e.toString();
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
Log.e(TAG, "Response from server: " + result);
pd.dismiss();
if (uploadedFileCount == MAX_COUNT) {
AlertDialog.Builder alert = new AlertDialog.Builder(CIBILCaptureandUPLOAD.this);
alert.setTitle(R.string.app_name);
alert.setMessage("Reach to max upload limit");
alert.setCancelable(false);
alert.setPositiveButton("OK", null);
alert.create().show();
}
// showing the server response in an alert dialog
showAlert(result);
AppUtill.deleteFolderAndAllFile(CIBILCaptureandUPLOAD.this);
super.onPostExecute(result);
}
}
photoFile= new File(contentUri.getPath());
查看 contentUri.getPath()
的值,发现它不是有效的文件系统路径。
相反,您应该为获得的 uri 打开一个 InputStream 并从流中读取文件内容。
InputStream is = getContentResolver().openInputStream(contentUri);