【问题标题】:No such file or directory issue没有这样的文件或目录问题
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • OP 说“用户使用图像选择器选择图像”——他的应用无需在任何地方捕获或存储任何内容。
  • 那么你必须压缩这个,这是我主要用来有效上传图片等的方法。
  • 据我了解,真正发生的是您的情况,一旦您捕获图像并请求上传,图像就不会在您的设备中。可能没有保存在您的设备中。
  • 我在一个应用程序上工作,并面临这个问题。该代码在 samsang 设备上运行良好,而在 htc 设备中存在此问题(您面临的问题)。这就是我建议的原因。安息吧,快乐编码。
  • 您是从哪里获得应用中的图像文件位置的?
猜你喜欢
  • 2020-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
相关资源
最近更新 更多