#flutter #flutter-dependencies #flutter-image
#флаттер #флаттер-зависимости #флаттер-изображение
Вопрос:
Я пытаюсь загрузить изображение на сервер, кстати, я использовал библиотеки для обрезки и выбора изображений. это работает нормально, но во время вызова API мне нужно кодировать как base64, здесь закодированная строка неверна по сравнению с онлайн-инструментом кодирования изображения в base64. таким образом, серверу не удалось сохранить данные, даже если он сохранил, это кажется недопустимым изображением. Пожалуйста, помогите мне решить эту проблему.
Я проверил API с помощью Postman (онлайн-инструменты для обработки изображений base64), он работает нормально.
Код :
Future<void> uploadProfileImage() async {
if (imageFile == null) return;
String imageFileName = imageFile.path.split("/").last;
// String base64ProfileImage = base64.encode(imageFile.readAsBytesSync()); // this gives problem
List<int> imageBytes = imageFile.readAsBytesSync();//
String encodedFile = base64.encode(imageBytes);//this also gives same problem
log(encodedFile);
......
Other Stuff
}
Онлайн-инструмент преобразования начинается с этих символов
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANcAAADXCAYAAACJfcS1AAA6BUlEQVR42u19B5QU1dbu3H/dtLw55/Svdd979/03vWtCVKKIiqCiKDmIJC9BEEYkM Q85JyGOAzBITNkEAdUMiiCkpGcMwj71Xdg9z1dc6rqVHd1d3V31Vp7wcx0VzjnfLX3/nY4GXP3H6VUkJGTJ1KrJ/8mZFjFR2hN/TIpLcvrlqICTVlZr3Tc7mt85WKUWfLvYh66NqhOs3buoVRZY24lIxUeYmzerBCwcl4pnjIAAjAW1SpBCw2ZV/
Ответ №1:
у меня была такая же проблема, и я решил ее следующим образом
Future<String> tobase64(File image) async {
// I encode files to base64 format
List<int> imgBytes = await image.readAsBytes();
String base64img = base64Encode(imgBytes);
return base64img;
}
Future getImage(
ImageSource source,
) async {
final pickedFile = await picker.getImage(source: source);
if (pickedFile != null) {
setState(() {
_image = File(pickedFile.path);
});
List<String> _splitted = pickedFile.path.split('.');
// this is the important line on formating
_process("data:image/${_splitted.last};base64,");
}
}
// this method process and formats your base64 data to the standard format
Future _process(String format) async {
baseSix4 = format await tobase64(_image);
}
Комментарии:
1. тот же результат сбоку, изменение в вашем коде, объединяющем текст «data: image / jpg; base64» спереди, но другой текст выглядит так же, как и раньше,
2. не только передняя часть, вам нужно вставить данные изображения между ‘data: image /’ и ‘; base64,’