保存图像文件然后上传有时不起作用

时间:2018-06-05 07:34:54

标签: dart flutter

所以,我正在尝试从相机中保存图像文件,然后将其上传到firebase。不幸的是,firebase存储插件有一些错误,并且没有返回错误,因此我需要在我这样做之前检查wifi连接,以防万一我需要缓存图像并稍后上传。一旦图像文件上传了i,然后创建一些JSON并将其发送到firebase数据库,其中应用程序会提取相关信息。

注意:有时这段代码有效且图片不是空的,其他图像是空的,所以我猜它是一个时间问题?

Future saveImageFile(UploadImage image) async {
  await storage.init();
  var imageFile = storage.saveImageFile(image.file, image.getName());
  instance.setInt("ImageCount", imageCount + 1);
  checkConnectionThenUploadImage(imageFile);
}

//From storage class
File saveImageFile(File toBeSaved, String fileName)  {
  final filePath = '$imageDirectory$fileName';
  var file = new File(filePath)
    ..createSync(recursive: true)
    ..writeAsBytes(toBeSaved.readAsBytesSync());
  return file;
}

checkConnectionThenUploadImage(File image) {
  checkConnectivity().then((isConnected) async {
    if (!isConnected) {
      instance.setBool("hasImagesToUpload", true);
    } else {
      await saveImageToStorage(image);
    }
  }).catchError((error) {
    print("Error getting connectivity status, was error: $error");
  });
}

saveImageToStorage(File imageFile) async {
  final fileName = getNameFromFile(imageFile);
  final StorageReference ref = FirebaseStorage.instance.ref().child("AllUsers").child(uuid).child(fileName);
  final StorageUploadTask uploadTask = ref.putFile(imageFile, const StorageMetadata(contentLanguage: "en"));
  final url = (await uploadTask.future).downloadUrl;

  if (url != null) {  //Normally you could catch an error here but the plugin has a bug so it needs to be checked in other ways
    final fireImage = new FireImage(getNameFromFile(imageFile), storage.getDateFromFileName(fileName), imageCount, "", url.toString());
    saveImageJsonToDatabase(fireImage);
    storage.deleteImageFile(fileName);
  } else {
    checkConnectionThenUploadImage(imageFile);
  }
}

saveImageJsonToDatabase(FireImage image) async {
  await storage.init();
  storage.saveJsonFile(image);
  checkConnectivity().then((isConnected) {
    if (!isConnected) {
      instance.setBool("hasJsonToUpload", true);
    } else {
      final DatabaseReference dataBaseReference = FirebaseDatabase.instance.reference().child("AllUsers").child(uuid);
      dataBaseReference.child("images").push().set(image.toJson()).whenComplete (() {
        storage.deleteJsonFile(basename(image.name));
      }).catchError((error) { //catching errors works with firebase database
        saveImageJsonToDatabase(image);
      });
    }
  });
}

//From storage class
deleteImageFile(String fileName) async {
  final filePath = '$imageDirectory$fileName';
  File(filePath).delete();
}

图像上传并创建了json,但是当我尝试使用来自firebase存储的下载URL查看图像时,它表示图像为空。我唯一的线索是,这是一个时间问题,因为它偶尔会发生。

任何人都可以看到我出错的地方吗?

0 个答案:

没有答案
相关问题