我正在通过一个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()时,我似乎无法找出如何获得响应正文结果。
非常感谢您的帮助或投入,谢谢!
答案 0 :(得分:3)
我检查了文档中的request.send,我返回了Future<StreamedResponse>
而不是Future<Response>
为StreamedResponse开掘更多,我发现它是ByteStream的response.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;