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

前端 未结 4 460
说谎
说谎 2021-02-04 02:30

I\'m doing an api request uploading an image with

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

i

相关标签:
4条回答
  • 2021-02-04 02:35

    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(()
    {});
    
    0 讨论(0)
  • 2021-02-04 02:49

    Just use http.Response.fromStream()

    import 'package:http/http.dart' as http;
    
    var streamedResponse = await request.send()
    var response = await http.Response.fromStream(streamedResponse);
    
    0 讨论(0)
  • 2021-02-04 02:53

    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);
    
    0 讨论(0)
  • 2021-02-04 03:00

    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

    0 讨论(0)
提交回复
热议问题