使用http包,我可以通过将te二进制数据放在post调用的主体中来将图像发送到服务器,如以下代码片段所示:
var response = await http.post('My_url', body: File(path).readAsBytesSync(), headers: {
'apikey': 'myAPIKEY',
'Content-Type': 'image/*', // set content-length
});我不能使用Dio做同样的事情,我不知道如何将二进制数据直接放入主体中(就像我可以使用postman一样)。

发布于 2021-01-28 17:34:05
我也面临着和你一样的问题。在DIO中,您必须通过流发送二进制数据。这是我如何实现它的示例,
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
);发布于 2020-10-30 15:26:05
如果有人遇到同样的问题,我只是提出我的解决方案。
我必须将文件上传到一个有谷歌签名的存储URL。在PUT请求的主体中插入文件二进制数据所需的API。无法使用DIO插件实现,我使用DART HTTP包解决了这个问题,以下是示例代码。
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(),
);发布于 2020-06-30 13:28:42
我声明了一个名为'data‘的FormData对象,并有一个图像映射,其中key作为文件名,value作为文件路径。‘'image’是在服务器端定义的key。
data.files.add(MapEntry(
'image',
await MultipartFile.fromFile(image.values.first, filename: "${image.values.first.split("/").last}")
));https://stackoverflow.com/questions/62648883
复制相似问题