Загрузка изображения флаттера - ошибки хранения Firebase с FIRStorageErrorDomain: Root сертификат не является доверенным - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь загрузить изображение в Firebase Storage с помощью симулятора iphone в приложении Flutter.

Мой код для загрузки:

try {
                  FirebaseStorage _storage = FirebaseStorage.instance;

                  File image =
                      await ImagePicker.pickImage(source: ImageSource.gallery);
                  String filename = path.basename(image.path);

                  StorageReference reference = _storage.ref().child("images/");

                  StorageUploadTask uploadTask = reference.putFile(
                      image);

                  final StorageTaskSnapshot downloadUrl =
                      (await uploadTask.onComplete);
                  final String url = (await downloadUrl.ref.getDownloadURL());
                  print('URL Is $url');

                  setState(() {
                    _images.add(url);
                  });
                } catch (e) {
                  print("Error received $e");
                }

Я использую версию

firebase_storage: ^ 3.1.3

Я получаю следующую ошибку

{
        type = error;
        value = "Root certificate is not trusted.";
    } )
    "LocalDataTask <0EE7042E-6F74-4086-BC11-B6953C86BB09>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <0EE7042E-6F74-4086-BC11-B6953C86BB09>.<1>, NSLocalizedDescription=cancelled}

Я просмотрел и заметил, что была старая ошибка, которая казалась похожей, но она была устранена, поскольку я использую более новую версию , Я также видел старую публикацию Stackoverflow об этом, и они предложили выйти и снова войти ... что я также сделал. Я не уверен, что означает эта ошибка и зашел в тупик. Что я могу сделать, чтобы решить эту проблему?

Я получаю сообщение об ошибке в

StorageUploadTask uploadTask = reference.putFile (image);

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Используйте этот метод для загрузки изображения в хранилище и получения URL загрузки: -

Future<String> _uploadFileToFirebase(String path, File file) async {
   StorageReference reference = FirebaseStorage.instance.ref().child(path);
   StorageUploadTask task = reference.putFile(file);
   return await (await task.onComplete).ref.getDownloadURL();
}
0 голосов
/ 03 марта 2020

Вам нужно использовать HttpOverrides, чтобы обойти проблему с сертификатом.

Создать класс, который расширяет HttpOverrides:

class _HttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext context) {
    final HttpClient client = super.createHttpClient(context);
    client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
    return client;
  }
}

и вызвать класс в main.dart

void main() {
    HttpOverrides.global = _HttpOverrides();
    runApp(App());
  }
}

ссылка: https://api.flutter.dev/flutter/dart-io/HttpOverrides-class.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...