【问题标题】:Cannot open file, path = 'file:///path' (OS Error: No such file or directory, errno = 2)无法打开文件,路径 = 'file:///path'(操作系统错误:没有这样的文件或目录,errno = 2)
【发布时间】:2018-03-28 16:41:05
【问题描述】:

您好,我正在尝试使用图片库减小从图库中挑选的图片大小 在尝试我遇到这样的错误时

E/flutter (13796): [ERROR:lib/tonic/logging/dart_error.cc(16)]    Unhandled exception:
E/flutter (13796): FileSystemException: Cannot open file, path = 'file:///storage/emulated/0/WhatsApp/Media/WhatsApp%20Images/IMG-20171016-WA0020.jpg' (OS Error: No such file or directory, errno = 2)
E/flutter (13796): #0      _File.throwIfError (file_impl.dart:618)
E/flutter (13796): #1      _File.openSync (file_impl.dart:473)
E/flutter (13796): #2      _File.readAsBytesSync (file_impl.dart:533)
E/flutter (13796): #3      _AddNewUserState.qqq (/data/data/com.prayuta.chitfunds/cache/chitfundsUNFPRG/chitfunds/lib/users.dart:420:97)
E/flutter (13796): <asynchronous suspension>
E/flutter (13796): #4      _AddNewUserState.build.<anonymous closure> (/data/data/com.prayuta.chitfunds/cache/chitfundsUNFPRG/chitfunds/lib/users.dart:686:19)
E/flutter (13796): #5      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter (13796): #6      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:149:9)
E/flutter (13796): #7      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:119:7)
E/flutter (13796): #8      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter (13796): #9          BindingBase&SchedulerBinding&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:147:20)
E/flutter (13796): #10     BindingBase&SchedulerBinding&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)
E/flutter (13796): #11     BindingBase&SchedulerBinding&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7)
E/flutter (13796): #12     BindingBase&SchedulerBinding&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)
E/flutter (13796): #13     BindingBase&SchedulerBinding&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7)
E/flutter (13796): #14     _invoke1 (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:100)
   E/flutter (13796): #15     _dispatchPointerDataPacket (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:58)

谁能帮忙,我的代码看起来像这样

import 'package:image/image.dart' as convertinglib;
File imageFile = await ImagePicker.pickImage();
convertinglib.Image image = convertinglib.decodeImage(new Io.File(imageFile.uri.toString()).readAsBytesSync());
convertinglib.Image thumbnail = convertinglib.copyResize(image, 120);

【问题讨论】:

  • package:image/image.dart 是什么样子的?图像选择器似乎工作正常。
  • 你能发布一个产生错误的工人阶级的最小例子吗?
  • imageuploader() async { 文件 imageFile = await ImagePicker.pickImage(); convertlib.Image 图像 = 转换lib.decodeImage(new Io.File(imageFile.uri.toString()).readAsBytesSync()); convertlib.Image thumbnail = conversionlib.copyResize(image, 120);现在日期时间 = 新日期时间.now(); var datestamp = new DateFormat("yyyyMMdd'T'HHmmss");字符串 currentdate = datestamp.format(now); setState(() { progressBarStatus = true; });
  • 但是convertinglib 是你自己写的吗?
  • convertinglib 只是库的别名

标签: dart flutter


【解决方案1】:

我想问题是将图像 URI 作为字符串传递。 有一个 fromUri 构造函数,您可以在其中传递文件 URI。

尝试使用

    new Io.File.fromUri(imageFile.uri)

而不是

    new Io.File(imageFile.uri.toString())

【讨论】:

  • 问题是,image_picker 隐藏了应用程序的真实 url。有关更多信息,请参阅我的答案。
  • 但我希望返回类型为文件以上传 Firebase 存储
  • 确实如此。当您想将image_picker 生成的imageUrlString 加载到File 中时,您应该使用File.fromUri(Uri.parse(imageUrlString))
【解决方案2】:

问题不在于使用图像选择器读取文件或转换为更小的文件,而是将文件写入文件系统。我接受,你拿了dart image package的示例代码 在调整文件大小后将文件写入文件系统。这种形式在智能手机上是不可能的。

您发布的代码实际上并没有导致错误,但这一行确实:

new Io.File(imageFile.uri.toString())
   ..writeAsBytesSync(convertingLib.encodePng(thumbnail))

这样做的问题是 imagePicker 隐藏了图像的真实 uri。它为您提供了如下所示的路径:.../tmp/image_picker_1547A964-791E-426F-A682-33D3AFA995BA-18295-0003861F9255294A.jpg,它不能用于保存您的新缩略图。

您可以先尝试避免保存文件,也可以将其保存到实际存在的位置(例如,您可以为此使用path_provider plugin)。

【讨论】:

  • 那么如何解决它,或者你能说有没有其他方法
  • 但我想作为文件返回如何获取它
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 2022-12-16
  • 2020-01-13
  • 2022-08-18
  • 1970-01-01
  • 2020-08-10
  • 2021-11-05
  • 2020-05-13
相关资源
最近更新 更多