Flutter - Cannot copy file to new path
我想将图像复制到应用程序目录,但是我总是会收到此错误:
[ERROR:flutter/shell/common/shell.cc(181)] Dart Error: Unhandled
exception: E/flutter ( 4159): FileSystemException: Cannot copy file to
'/data/user/0/com.vendetta.recipe/app_flutter', path =
'/storage/emulated/0/Android/data/com.vendetta.recipe/files/Pictures/a6fd32a9-60b2-4cff-8f10-2ffc2933bf751208556873045090039.jpg'
(OS Error: Is a directory, errno = 21) E/flutter ( 4159): #0
_File.copy. (dart:io/file_impl.dart:340:9) E/flutter ( 4159): #1 _RootZone.runUnary
(dart:async/zone.dart:1379:54) E/flutter ( 4159): #2
_FutureListener.handleValue (dart:async/future_impl.dart:129:18) E/flutter ( 4159): #3
Future._propagateToListeners.handleValueCallback
(dart:async/future_impl.dart:642:45) E/flutter ( 4159): #4
Future._propagateToListeners (dart:async/future_impl.dart:671:32)
E/flutter ( 4159): #5 Future._completeWithValue
(dart:async/future_impl.dart:486:5) E/flutter ( 4159): #6
Future._asyncComplete.
(dart:async/future_impl.dart:516:7) E/flutter ( 4159): #7
_microtaskLoop (dart:async/schedule_microtask.dart:41:21) E/flutter ( 4159): #8 _startMicrotaskLoop
(dart:async/schedule_microtask.dart:50:5)
我想复制此图像,以确保在保存时用户没有删除重要文件。 我想将其存储在数据库中。
这是我复制图像的代码,该图像是使用image_picker拍摄的:
1 2 3 | Directory directory = await getApplicationDocumentsDirectory(); String path = directory.path; File newImage = await _image.copy('$path'); |
我希望有人能够解决我的问题。
1 | File newImage = await _image.copy('$path/filename.jpg'); |
请尝试此操作,然后问题就解决了
我提供给您还可以动态复制任何扩展名的文件
按着这些次序 -
1.首先添加此导入
1 | import 'package:path/path.dart' as path; |
2.获取带扩展名的文件名
1 | var basNameWithExtension = path.basename(sourceFile.path); |
3.然后将扩展名传递给
1 | var file = await moveFile(sourceFile,newPath+"/"+basNameWithExtension); |
4.然后写这个方法
1 2 3 4 5 6 7 8 9 10 11 12 | Future<File> moveFile(File sourceFile, String newPath) async { try { /// prefer using rename as it is probably faster /// if same directory path return await sourceFile.rename(newPath); } catch (e) { /// if rename fails, copy the source file and then delete it final newFile = await sourceFile.copy(newPath); await sourceFile.delete(); return newFile; } } |