More
Как использовать Uint8List в Flutter и сохранять его на сервере с помощью Back4app
12 мин
введение в цифровых системах файлы часто представляются в виде последовательности байтов, и dart предоставляет эффективный способ работы с байтовыми данными с помощью uint8list uint8list — это список фиксированной длины беззнаковых 8 битных целых чисел, что означает, что каждое число находится в диапазоне от 0 до 255 эта структура полезна для работы с двоичными данными, такими как изображения или файлы, где важна эффективность использования памяти в этом учебном пособии мы рассмотрим, как работать с uint8list в flutter, конвертировать файлы в байтовые списки и сохранять данные в бэкенде back4app с использованием parse sdk для flutter предварительные требования перед началом убедитесь, что у вас есть следующее аккаунт back4app зарегистрируйтесь для получения бесплатного аккаунта на back4app com https //www back4app com настроенная среда разработки flutter на вашем локальном компьютере следуйте руководству по установке flutter https //flutter dev/docs/get started/install , если вы еще не настроили её базовые знания dart, виджетов flutter и использования back4app для бэкенд сервисов шаг 1 – настройка вашего бэкенда back4app создайте проект back4app войдите в свой аккаунт back4app https //www back4app com/ и создайте новый проект создайте классы parse для этого учебного пособия создайте класс parse с именем filestorage для хранения двоичных данных filename (string) имя файла filedata (file) двоичные данные файла получите свои учетные данные back4app перейдите в настройки вашего проекта, чтобы получить ваш application id и client key, которые вам понадобятся для подключения вашего приложения flutter к back4app шаг 2 – настройка проекта flutter создайте новый проект flutter откройте ваш терминал или командную строку и выполните flutter create uint8list example добавьте зависимости откройте pubspec yaml и добавьте следующие зависимости dependencies flutter sdk flutter parse server sdk flutter latest version file picker latest version path provider latest version запустите flutter pub get для установки этих зависимостей инициализируйте parse в вашем приложении в lib/main dart , инициализируйте sdk parse import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your back4app app id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(myapp()); } class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( home uint8listexample(), ); } } замените 'your back4app app id' и 'your back4app client key' на ваши реальные учетные данные back4app шаг 3 – работа с uint8list в flutter выбор и чтение файла используйте пакет file picker для выбора файла с устройства и преобразования его в uint8list import 'dart\ io'; import 'dart\ typed data'; import 'package\ flutter/material dart'; import 'package\ file picker/file picker dart'; import 'package\ path provider/path provider dart'; class uint8listexample extends statefulwidget { @override uint8listexamplestate createstate() => uint8listexamplestate(); } class uint8listexamplestate extends state\<uint8listexample> { uint8list? filebytes; string? filename; future\<void> pickfile() async { filepickerresult? result = await filepicker platform pickfiles(); if (result != null) { platformfile file = result files first; setstate(() { filebytes = file bytes; filename = file name; }); } } @override widget build(buildcontext context) { return scaffold( appbar appbar(title text('uint8list example')), body center( child column( mainaxisalignment mainaxisalignment center, children \[ elevatedbutton( onpressed pickfile, child text('pick a file'), ), if ( filename != null) text('selected file $ filename'), if ( filebytes != null) elevatedbutton( onpressed savetobackend, child text('save to backend'), ), ], ), ), ); } future\<void> savetobackend() async { // implement the saving logic in the next step } } этот код позволяет пользователю выбрать файл, читает файл как uint8list , и отображает имя файла и кнопку для его сохранения шаг 4 – сохранение uint8list в back4app чтобы сохранить файл в back4app, мы используем объект parsefile , который позволяет загружать двоичные данные, такие как изображения или документы сохранение файла в back4app обновите метод savetobackend , чтобы сохранить выбранный файл в back4app future\<void> savetobackend() async { if ( filebytes != null && filename != null) { final parsefile = parsefile(null, name filename, bytedata filebytes); // create a new parseobject to store the file final filestorage = parseobject('filestorage') set('filename', filename) set('filedata', parsefile); // save the file in back4app final response = await filestorage save(); if (response success) { scaffoldmessenger of(context) showsnackbar(snackbar( content text('file saved successfully!'), )); } else { scaffoldmessenger of(context) showsnackbar(snackbar( content text('failed to save file '), )); } } } этот метод загружает файл как двоичные данные в back4app, используя parsefile если успешно, он отображает сообщение с подтверждением шаг 5 – запуск приложения запустите ваше приложение с помощью flutter run вы должны увидеть кнопку для выбора файла, а затем опцию для его сохранения на сервере после выбора проверьте данные в back4app войдя в свою панель управления back4app и проверив класс filestorage вы должны увидеть сохраненный файл вместе с его именем лучшие практики для хранения двоичных данных при работе с uint8list и двоичными данными, вот несколько лучших практик используйте parsefile от back4app — это эффективный способ хранения и извлечения двоичных данных, таких как изображения, видео и документы избегайте хранения больших файлов непосредственно в объектах parse если ваши файлы большие, рассмотрите возможность использования службы хранения, такой как aws s3, и храните url файла в вашем объекте parse вместо самого файла сжатие и оптимизация для больших изображений или файлов рассмотрите возможность сжатия файла перед загрузкой, чтобы улучшить производительность заключение в этом руководстве мы рассмотрели, как работать с uint8list в flutter, конвертировать файлы в списки байтов и сохранять эти данные в back4app с использованием parse sdk uint8list предоставляет эффективный с точки зрения памяти способ обработки байтовых данных в dart, что делает его подходящим для операций с файлами, таких как загрузка изображений, хранение документов и многое другое интеграция с back4app позволяет вам легко хранить и управлять двоичными данными в облаке для получения дополнительной информации посетите документацию flutter https //flutter dev/docs и документацию back4app https //www back4app com/docs удачного кодирования!