【发布时间】:2016-02-11 05:23:38
【问题描述】:
我想使用 multipart/form-data 将图像上传到服务器。用户使用图像选择器选择图像,如下所示:
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
act.startActivityForResult(intent, requestCode);
在他选择图像后,我在 onActivityResult 中收到它,代码如下:
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);
它抛出这个异常:
java.io.FileNotFoundException: /storage/sdcard0/DCIM/100LGDSC/CAM00015.jpg: open failed: ENOENT (No such file or directory)
问题是,有些照片被找到并上传(无论是否在 sdcard 上),而有些则没有......例如这张正在上传:
/storage/sdcard0/DCIM/100LGDSC/CAM00008.jpg
我有这些权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
那么问题就很清楚了,有些图片找不到的原因是什么?
【问题讨论】:
-
你有上网权限吗?
-
做一件事。将用户选择的照片保存在新位置。然后从那里选择它。一旦它上传,删除它。
-
是的,我忘记在此处添加那个了。
-
那么问题是MediaStore返回一个不存在的图片的URI? - a) 文件真的存在吗? b) 您确定您通过内容提供者正确解析了 URI(
act是什么)? -
用户只需选择设备上真正存在的图像。我也在我的应用程序之外检查了它 - 在照片库中,路径与 filenotfoundexception 中的路径完全相同......其中一些效果很好,就像我在帖子中写的......行为是来自哪里的活动我正在调用图像选择器。
标签: android image file-upload filenotfoundexception fileinputstream