没有这样的文件或目录问题

时间:2015-11-10 10:44:36

标签: android image file-upload filenotfoundexception fileinputstream

我想使用multipart / form-data将图像上传到服务器。用户使用图像选择器选择图像,如下所示:

<span class=b>Click</span>

在他选择图像后,我在onActivityResult中使用以下代码接收它:

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
act.startActivityForResult(intent, requestCode);

所以我得到了文件的路径。当我想用这段代码将图像上传到服务器时:

Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
String filePath = null;

Cursor cursor = act.getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if (cursor != null) {
    cursor.moveToFirst();
    filePath = cursor.getString(cursor.getColumnIndex(filePathColumn[0]));
    cursor.close();
}

return filePath;

它引发了这个异常:

File file = new File(filePath);
FileInputStream fileInputStream = new FileInputStream(file);

问题是,有些照片被发现并上传(即使是在SD卡上也没有),其中一些没有...例如这一张正在上传:

java.io.FileNotFoundException: /storage/sdcard0/DCIM/100LGDSC/CAM00015.jpg: open failed: ENOENT (No such file or directory)

我有这些权限:

/storage/sdcard0/DCIM/100LGDSC/CAM00008.jpg

所以问题很清楚,可能是某些图像无法找到的原因是什么?

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的那样。这是它的细节。 在某些设备中,当您捕获图像时,它们会立即将其保存到您的设备,但有些设备不会这样做(它还取决于用户设置)。此外,如果使用s5或任何其他具有高分辨率相机的手机拍摄图像,图像尺寸将介于5到10 mb之间。将这种高尺寸图像上传到服务器并不是一种重要的方法。我的建议是,您必须捕获图像,将其保存在手机中,压缩并上传。在此之后你也可以删除它。检查this并链接以获取帮助,他正在保存并压缩图像。并阅读this以了解对位图等的了解。