如何在Dart中使用request.send()获取响应主体

时间:2019-04-04 16:23:44

标签: dart flutter

我正在通过一个api请求上传图片,

var request = new http.MultipartRequest("POST", uri);
var response = await request.send()
用飞镖飞镖。然后,我可以使用

检查响应代码。
if (response.statusCode == 200) {
   print('ok');
}

通过其他调用,我也可以通过以下方式获取响应正文

var result = response.body;

但是当使用request.send()时,我似乎无法找出如何获得响应正文结果。

非常感谢您的帮助或投入,谢谢!

5 个答案:

答案 0 :(得分:3)

我检查了文档中的request.send,我返回了Future<StreamedResponse>而不是Future<Response>

StreamedResponse开掘更多,我发现它是ByteStreamresponse.stream

这是您可以获取String响应的方法

final response = await request.send();
final respStr = await response.stream.bytesToString();

在我的视觉观点中,如果要流式响应而不是“已收集”响应,则仅应使用request.send。有关streams in dart here

的更多信息

答案 1 :(得分:3)

只需使用Response.fromStream()

var streamedResponse = await request.send()
var response = await Response.fromStream(streamedResponse);

答案 2 :(得分:0)

您可以在第一个回应后进行投射,外观:

var postUri = Uri.parse("http://my-api.com/updatePhoto");
var request = new http.MultipartRequest("POST", postUri);

request.fields['user_id'] = user_id

request.files.add(await http.MultipartFile.fromPath(
  'photo',
  myPhoto.absolute.path,
  contentType: new MediaType('application', 'x-tar'),
));

request.send().then((result) async {

  http.Response.fromStream(result)
      .then((response) {

    if (response.statusCode == 200)
    {
      print("Uploaded! ");
      print('response.body '+response.body);
    }

    return response.body;

  });
}).catchError((err) => print('error : '+err.toString()))
    .whenComplete(()
{});

答案 3 :(得分:0)

由于您使用过MultipartRequest,因此您的Streamed Response返回了request.send。您将需要从响应中提取字符串值,如下所示:

import 'package:http/http.dart'

var request = new MultipartRequest("POST", uri);
var response = await request.send()

// Extract String from Streamed Response
var responseString = await response.stream.bytesToString();

在这种情况下,responseString就像的response.body

final response = await post(URL, body : map);

答案 4 :(得分:0)

对我有用的是,

await res.stream.transform(utf8.decoder).transform(json.decoder).first;