I\'m doing an api request uploading an image with
var request = new http.MultipartRequest(\"POST\", uri);
var response = await request.send()
i
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(()
{});
Just use http.Response.fromStream()
import 'package:http/http.dart' as http;
var streamedResponse = await request.send()
var response = await http.Response.fromStream(streamedResponse);
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);
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