首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flutter DIO:使用二进制body和Dio包上传图像

Flutter DIO:使用二进制body和Dio包上传图像
EN

Stack Overflow用户
提问于 2020-06-30 09:11:51
回答 5查看 4.2K关注 0票数 5

使用http包,我可以通过将te二进制数据放在post调用的主体中来将图像发送到服务器,如以下代码片段所示:

代码语言:javascript
复制
var response = await http.post('My_url', body: File(path).readAsBytesSync(),  headers: {
                    'apikey': 'myAPIKEY',
                    'Content-Type': 'image/*', // set content-length
                  });

我不能使用Dio做同样的事情,我不知道如何将二进制数据直接放入主体中(就像我可以使用postman一样)。

EN

回答 5

Stack Overflow用户

发布于 2021-01-28 17:34:05

我也面临着和你一样的问题。在DIO中,您必须通过流发送二进制数据。这是我如何实现它的示例,

代码语言:javascript
复制
Uint8List image = File(path).readAsBytesSync();

Options options = Options(
  contentType: lookupMimeType(path),
  headers: {
    'Accept': "*/*",
    'Content-Length': image.length,
    'Connection': 'keep-alive',
    'User-Agent': 'ClinicPlush'
  }
);

Response response = await dio.put(
  url,
  data: Stream.fromIterable(image.map((e) => [e])),
  options: options
);
票数 6
EN

Stack Overflow用户

发布于 2020-10-30 15:26:05

如果有人遇到同样的问题,我只是提出我的解决方案。

我必须将文件上传到一个有谷歌签名的存储URL。在PUT请求的主体中插入文件二进制数据所需的API。无法使用DIO插件实现,我使用DART HTTP包解决了这个问题,以下是示例代码。

代码语言:javascript
复制
import 'package:http/http.dart' as http;

await http.put(
  Uri.parse(uploadURL),
  headers: {
    'Content-Type': mimeType,
    'Accept': "*/*",
    'Content-Length': File(filePath).lengthSync().toString(),
    'Connection': 'keep-alive',
  },
  body: File(filePath).readAsBytesSync(),
);
票数 4
EN

Stack Overflow用户

发布于 2020-06-30 13:28:42

我声明了一个名为'data‘的FormData对象,并有一个图像映射,其中key作为文件名,value作为文件路径。‘'image’是在服务器端定义的key。

代码语言:javascript
复制
 data.files.add(MapEntry(
    'image',
      await MultipartFile.fromFile(image.values.first, filename: "${image.values.first.split("/").last}")
                                ));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62648883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档