flutter 用PUT的方式传输文件不带分隔符

简介: flutter 用PUT的方式传输文件不带分隔符

最近有个需求,需要在flutter中用put的方式传输固件到设备上,本来以为用dio或者http这两个框架就能轻松完成的,结果发现,这两个框架传输过去的文件都会修改了源文件,把请求头的分隔符也带进去了,设备无法识别就升级不了。

    图如下:



                                    (这个是使用dio传输的,错误文件)



                                            (这个是源文件)

    通过对比,发现用dio和http传输的文件都会把头部也写入源文件下,这样就会导致设备无法识别,我查阅了官网和源码,也无法分析出到底是哪里导致此问题的发生,如果有知道的小伙伴可以通过下方评论告知我。

    现在我们说一下解决方案,我这个解决方案不是最终解决方案,只是替代,临时解决,方法如下:

    我们使用flutter最基础的网络框架clienthttp来实现我们的文件传输就没有该问题了,代码如下:

try{
String fileNames = "您要传输的文件名";
String urlPath = "您要传输的URL";

  HttpClient httpClient = new HttpClient();
  HttpClientRequest requests = await httpClient.putUrl(Uri.parse(urlPath));

  requests.add(file.readAsBytesSync());

  final response = await requests.close();
  print('Response status: ${response.statusCode}');
  await response.transform(utf8.decoder).forEach(print);
  httpClient.close();


  if (response.statusCode == 200) {
     Fluttertoast.showToast(msg: "升级成功");
  } else {

     Fluttertoast.showToast(msg: "升级失败");
  }


} catch (e) {
  print('downloadFile error---------$e');
}

    使用上面的代码后,我们会发现,传输到固件的文件就不会带有分隔符,这样设备就能正常识别并且升级,我对比后猜测是dio和http这两个框架在底层默认使用了表单这种方式去传输文件,所以表单才会把头部也写入了文件中,而且它们是针对服务器的,服务器能好好的识别这些信息然后剔除掉,但是我们用来传输给设备,设备不做这种识别就会出现上面的问题。也不知道猜测是否准确,有知道的大佬可以评论下留言交流
相关文章
|
Go 开发工具 C语言
flutter项目打包.exe文件发布windows版
目录 发布windows版 1.为现有的 Flutter 应用程序添加桌面支持 2..创建main_desktop.dart文件 3.hover安装和环境配置 4.初始化,并打包 坑1
1452 0
flutter项目打包.exe文件发布windows版
|
存储 Android开发 iOS开发
flutter使用dio实现 文件下载并实现进度监听总结
在flutter开发中使用dio实现 文件下载并实现进度监听
|
6月前
|
存储 缓存
Flutter 文件读写---path_provider
Flutter 文件读写—path_provider 在Flutter中,可以通过path_provider库来实现文件的读写操作。这个库提供了许多方法,可以方便地获取设备上的常用目录,比如文档目录、下载目录、临时目录等。
196 1
|
开发框架 Dart 测试技术
Flutter 应用开发的pubspec.yaml文件说明
Flutter 应用开发的pubspec.yaml文件说明
|
Dart 开发工具 Android开发
flutter 的 pubspec.yaml 文件解析
pubspec.yaml 文件是 Flutter 项目的核心配置文件,用于定义项目的元数据、依赖关系、资源文件和环境约束等等。本文对该文件中的所有配置依据类别进行一一讲解,并给出相应的示例。
326 0
|
Dart IDE 开发工具
Flutter工程解析(如何运行写初始化一个Dart文件)
解析 — Flutter工程解析(如何运行写初始化一个Dart文件) 这是一节小白必看的解析哦~,如果你了解过一点Flutter的写法可以跳过这节.
Flutter工程解析(如何运行写初始化一个Dart文件)
|
开发工具 Android开发 iOS开发
给Flutter项目添加.gitignore文件以及如何修改.gitignore文件并生效
flutter项目的开发,一般来说都是与原生开发混合进行的,单纯的flutter开发局限性很大,需要与原生进行配合。
|
移动开发 Dart Java
Flutter 文件、类、方法添加注释模板
Flutter 文件、类、方法添加注释模板
1130 2
Flutter 文件、类、方法添加注释模板
|
Android开发
【错误记录】Flutter 混合开发报错 ( java.nio.file.FileSystemException: xxx/R.jar: 另一个程序正在使用此文件,进程无法访问。 )
【错误记录】Flutter 混合开发报错 ( java.nio.file.FileSystemException: xxx/R.jar: 另一个程序正在使用此文件,进程无法访问。 )
680 0
【错误记录】Flutter 混合开发报错 ( java.nio.file.FileSystemException: xxx/R.jar: 另一个程序正在使用此文件,进程无法访问。 )
|
Dart 开发者
【Flutter】Flutter 资源文件使用 ( 导入资源图片 | 使用图片资源 )(二)
【Flutter】Flutter 资源文件使用 ( 导入资源图片 | 使用图片资源 )(二)
136 0
【Flutter】Flutter 资源文件使用 ( 导入资源图片 | 使用图片资源 )(二)