How to get response body with request.send() in dart

老子叫甜甜 提交于 2021-02-17 15:13:37

问题


I'm doing an api request uploading an image with

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

in dart using flutter. I can then check the response code with for instance

if (response.statusCode == 200) {
   print('ok');
}

with other calls I can also get the response body with

var result = response.body;

however when using request.send() I can't seem to find out how to get the response body result.

Any help or input is very much appreciated, thanks!


回答1:


I checked the docs for request.send I returns Future<StreamedResponse> instead of Future<Response>

Digging more for StreamedResponse I found that it response.stream which is a ByteStream

Here is what you can do to get response in String

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

In my opinoin you should only use request.send if you want streamed response instead of "collected" response. More about streams in dart here




回答2:


Just use http.Response.fromStream()

import 'package:http/http.dart' as http;

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



回答3:


You can cast after first response, look :

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(()
{});



回答4:


Your MultipartRequest returns a Streamed Response since you used request.send. You will need to extract the string value from the response like below:

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();

In this case the responseString will be just like response.body of

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


来源:https://stackoverflow.com/questions/55520829/how-to-get-response-body-with-request-send-in-dart

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!