Я хочу скопировать изображение в каталог приложения, но всегда получаю такую ошибку:
[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:
Directory directory = await getApplicationDocumentsDirectory();
String path = directory.path;
File newImage = await _image.copy('$path');
Надеюсь, кто-нибудь сможет решить мою проблему.
path - это каталог /data/user/0/com.vendetta.recipe/app_flutter. Попробуйте добавить к нему /filename.jpg.
File newImage = await _image.copy('$path/filename.jpg');
пользователю необходимо предоставить вам доступ для записи в некоторые каталоги
Подождите, вы имеете в виду, что мне нужно каждый раз запрашивать доступ пользователя к хранилищу? На данный момент я прошу разрешения при открытии приложения
нет не каждый раз.
Но я получаю сообщение об ошибке, даже если я уже запросил разрешение пользователя. Решение, которое я нашел, заключалось в том, чтобы скомпилировать dk на уровне 29 и добавить "allowLegacyExternalStorage" как истинное в Android manifest.xml. Я узнал, что это связано с ограниченным хранилищем в Android 10, но как теперь использовать каталог внешнего хранилища?
@NithinSai, вы нашли решение, я тоже столкнулся с этой проблемой
@Adnanhaider в Android 10, как я уже упоминал, вам нужно добавить устаревшую поддержку в манифест android:requestLegacyExternalStorage = "true", начиная с Android 11 и далее, вам нужно использовать хранилище с ограниченным объемом памяти. Обратитесь к документации: developer.android.com/about/versions/11/privacy/storage
Пожалуйста, попробуйте это, и ваша проблема будет решена
Я предоставил вам возможность динамически копировать файл любого расширения.
Следуй этим шагам -
1. Сначала добавьте этот импорт
import 'package:path/path.dart' as path;
2. получить имя файла с расширением
var basNameWithExtension = path.basename(sourceFile.path);
3. Затем передайте расширение в
var file = await moveFile(sourceFile,newPath+"/"+basNameWithExtension);
4.Затем напишите этот метод
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
final newFile = await sourceFile.copy(newPath);
return newFile;
}
}
Привет, это удаляет исходный файл?
Пожалуйста, проверьте обновленный код.
я хочу использовать копирование или перемещение моего файла из одного каталога в другой, как я могу это сделать, вот мой путь к файлу '/storage/emulated/0/Android/data/com.wasisoft.topi/files/vi deo1.mp4' и здесь я хочу переместить свой путь к файлу '/ storage / emulated / 0 / Download / video1. mp4 ',
Эй, это вызывает ошибку в Android 10, errno 13, в разрешении отказано