解码base64字符串并将其另存为文件时出现问题

时间:2019-04-26 18:46:55

标签: image pdf flutter base64

我在我的应用程序中进行了聊天,用户可以在其中发送短信或 上传文件(仅jpg和pdf)。对于文件,我将以base64编码的文件发送到服务器,然后在服务器端进行转换。 接下来的所有步骤都已经完成:

  1. 服务器获取base64字符串,并将其另存为图像或pdf。
  2. 此文件还可以,因为我可以从ftp中打开它们。
  3. 应用程序中的用户如果尚未从服务器下载文件(服务器从文件中返回base64编码的字符串)
  4. 在颤动侧,我得到了字符串,并对其进行了解码。这就是我遇到的问题:

    • 如果我将解码的base64字符串直接用作Image.memory(Uint8List),则显示没有问题。因此,该问题与base64字符串无关。

    • 但这不是我想要的行为,因为如果文件不存在,我希望第一次“下载”该文件,然后如果存在,我只想打开它(将os默认软件用于图片或pdf)

这是我用于保存文件的代码:

String dir = (await getApplicationDocumentsDirectory()).path;
String archivoBase64 = await _repository.getArchivoBase64FromMensaje({'id': data['comentario']['id']});
await File('$dir/${data['comentario']['texto']}').writeAsBytes(base64.decode(archivoBase64).buffer.asUint8List());
await OpenFile.open('$dir/${data['comentario']['texto']}');

OpenFile.open()函数完成了预期的功能,当它是pdf时,它显示的软件选项,或者仅显示具有默认图片查看器的图像。

重要提示:我使用base64,因为此聊天中的文件是私有文件(票据,与银行相关的文件...),因此,例如由于它们位于服务器的私有文件夹中,因此无法从浏览器进行访问。

我正在使用这些库:

  • path_provider:^ 0.5.0 + 1(用于获取文件或文件夹的路径)
  • 打开文件:1.2.2(用于打开保存的文件)

更新

我已经尝试过使用iOS(iphone 8 iOS 12.2)和我的个人电话(samsung s8plus android 9),并且效果很好。我一直在尝试的手机是android 6的huawei p8 lite。我将继续进行更多测试,以查看错误是否出在这款特定的手机,android版本等上。

UPDATE2

我已经解决了。我将flutter项目迁移到AndroidX,然后将所有flutter包依赖项更新为最新版本。我不知道这是否是解决问题的方法,但是现在我可以从android 6设备打开这些文件了。哇!

0 个答案:

没有答案