Flutter Flatter readAsBytesSync文件读取不完整,无法编码base64 列表项

Flutter Flatter readAsBytesSync文件读取不完整,无法编码base64 列表项,flutter,asynchronous,dart,base64,imagepicker,Flutter,Asynchronous,Dart,Base64,Imagepicker,我正试图通过HTTP POST和base64编码将JPG图像(由emulator中的ImagePicker捕获)发送到AWS REST API。但是readAsBytesSync()操作只读取图像的(头)部分(我已经测试过它以字节的形式打印到字符串中),因此base64只能对这一小部分进行编码。原因可能是什么,非常感谢您的帮助 Future<void> captureImage(ImageSource imageSource) async { try { Im

我正试图通过HTTP POST和base64编码将JPG图像(由emulator中的ImagePicker捕获)发送到AWS REST API。但是readAsBytesSync()操作只读取图像的(头)部分(我已经测试过它以字节的形式打印到字符串中),因此base64只能对这一小部分进行编码。原因可能是什么,非常感谢您的帮助

  Future<void> captureImage(ImageSource imageSource) async {
    try {
      ImagePicker picker = ImagePicker();
      final pickedFile = await picker.getImage(
          source: ImageSource.camera,
          preferredCameraDevice: CameraDevice.front);
                 String theimagepath = pickedFile.path.toString();
        //_imageFile = imageFile;
       
        print('theimagepath just below');
        print(theimagepath);
         
           String img64 = base64Encode(Io.File(theimagepath).readAsBytesSync());
           //print('bytes'+bytes.toString());
         
           print('img64:   '+img64);
 _imageFile = Io.File(pickedFile.path);


      setState(() {
        print('State here is ');
这也发生在我身上

起初我以为它是在前端(颤振),但经过数小时的检查和研究,结果是后端(go-lang)接收器的缓冲区读取器在整个base64通过API调用发送之前关闭了它。

这也发生在我身上


起初我以为它是在前端(flatter),但经过数小时的检查和研究,结果是后端(go-lang)接收器的缓冲区读取器在整个base64通过API调用发送之前关闭了它。

您是否证明了
readAsBytesSync()
并没有读取整个文件?您是否将
文件(theimagepath).readAsBytesSync().length
与文件系统上观察到的实际文件大小(
文件(theimagepath).lengthSync()
)进行了比较?档案有多大?都是87590。文件是JPG。通过Android Studio设备管理器导出到linux文件系统,它还显示87590。但是输出仍然是不完整的。如果
readAsBytesSync()
返回了长度正确的
Uint8List
,它肯定会读取整个文件。你是如何确定它是不完整的?您是否检查了文件本身以确保它包含您期望的所有数据?我将其发送到AWSAPI,它显示:“TypeError:不正确的填充”。正如您可以看到上面的输出窗口屏幕,编码字符串不完整(非常短)。我手工制作了一个base64,并与之进行了比较(它们的头部似乎相同),但这是不完整的。将字节打印到屏幕上也不完整。这真的很奇怪,到目前为止,我尝试了几十种不同的方法,但没有结果。很长的字符串可能只是在打印时被截断,以避免对控制台进行垃圾处理。再次说明:您是否检查了要读取的实际文件?您如何比较手动生成的base64输出?从根本上说,有什么证据支持您的结论,即
readAsBytesSync
是问题所在,而不是其他问题?您确定文件本身是完整的吗?在不进行base64编码的情况下,您是否观察到
readAsBytesSync
返回的字节与文件中的字节不同?您是否证明
readAsBytesSync()
没有读取整个文件?您是否将
文件(theimagepath).readAsBytesSync().length
与文件系统上观察到的实际文件大小(
文件(theimagepath).lengthSync()
)进行了比较?档案有多大?都是87590。文件是JPG。通过Android Studio设备管理器导出到linux文件系统,它还显示87590。但是输出仍然是不完整的。如果
readAsBytesSync()
返回了长度正确的
Uint8List
,它肯定会读取整个文件。你是如何确定它是不完整的?您是否检查了文件本身以确保它包含您期望的所有数据?我将其发送到AWSAPI,它显示:“TypeError:不正确的填充”。正如您可以看到上面的输出窗口屏幕,编码字符串不完整(非常短)。我手工制作了一个base64,并与之进行了比较(它们的头部似乎相同),但这是不完整的。将字节打印到屏幕上也不完整。这真的很奇怪,到目前为止,我尝试了几十种不同的方法,但没有结果。很长的字符串可能只是在打印时被截断,以避免对控制台进行垃圾处理。再次说明:您是否检查了要读取的实际文件?您如何比较手动生成的base64输出?从根本上说,有什么证据支持您的结论,即
readAsBytesSync
是问题所在,而不是其他问题?您确定文件本身是完整的吗?如果不进行base64编码,您是否观察到返回的字节与文件中的字节不同?
------------- DEBUG OUTPUT BELOW (base64 encoded string is incomplete) -------------

I/flutter (13629): theimagepath just below
I/flutter (13629): /storage/emulated/0/Android/data/com.example.blabla/files/Pictures/f8a0295e-9ce5-446c-91d2-41c938e49b7f5430316734413263510.jpg
I/flutter (13629): img64:   /9j/4QGqRXhpZgAATU0AKgAAAAgABwEQAAIAAAAPAAAAYgEAAAQAAAABAAAFoAEBAAQAAAABAAAHgAEyAAIAAAAUAAAAcQESAAMAAAABAAEAAIdpAAQAAAABAAAAjAEPAAIAAAAHAAAAhQAAAABzZGtfZ3Bob25lX3g4NgAyMDIwOjA2OjI1IDExOjUzOjU0AEdvb2dsZQAAEIKdAAUAAAABAAABUoKaAAUAAAABAAABWpKSAAIAAAAENDE2AJKRAAIAAAAENDE2AJKQAAIAAAAENDE2AJIKAAUAAAABAAABYpIJAAMAAAABAAAAAIgnAAMAAAABAGQAAJAEAAIAAAAUAAABapADAAIAAAAUAAABfqADAAQAAAABAAAHgKQDAAMAAAABAAAAAKACAAQAAAABAAAFoJICAAUAAAABAAABkpIBAAoAAAABAAABmpAAAAcAAAAEMDIyMAAAAAAAAACtAAAAZAAgCBc7msoAAAARHAAAA+gyMDIwOjA2OjI1IDExOjUzOjU0ADIwMjA6MDY6MjUgMTE6NTM6NTQAAAAAngAAAGQAACK/AAAD6P/gABBKRklGAAEBAAABAAEAAP/bAEMAAgEBAQEBAgEBAQICAgICBAMCAgICBQQEAwQGBQYGBgUGBgYHCQgGBwkHBgYICwgJCgoKCgoGCAsMCwoMCQoKCv/bAEMBAgICAgICBQMDBQoHBgcKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCv/AABEIB4AFoAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZ
I/flutter (13629): State here is