我一直在努力使这个东西正常工作。 此POST方法是上传应为“文件”和标题的图像。 该API要求:
PAYLOAD:
- caption
- image
HEADER
- AUTHENTICATION
我是新手,我已经学习了很多教程,但是似乎没有任何效果。
这是我的代码:
static Future<void> addPost(
BuildContext context, String caption, File image) async {
debugPrint("$image");
String imageFile = image.path.split("/").last;
debugPrint("$imageFile");
Utils().showRegisterProgressDialog(context);
final userData = {
"caption": caption,
"image" : image
};
final response = await http.post(
APIServices.HTTP_DOMAIN + APIServices.POST_ADD_NEW,
body: userData,
headers: {"Authentication": "Bearer " + Constants.token});
debugPrint("STATUS: ${response.statusCode}");
if (response.statusCode == 200) {
Utils().hidePostingDialog(context);
Utils().postSuccessDialog(context);
} else {
Utils().hidePostingDialog(context);
Utils().postErrorDialog(context);
}
print(response.body);
return response;
}
我将不胜感激。
编辑
我也尝试过使用MultipartRequest
,但是它返回的状态码为500
这是我的代码:
static Future<void> addPost(
BuildContext context, String caption, File image) async {
Map<String, String> headers = {
"Authentication": "Bearer ${Constants.token}"
};
debugPrint("TOKEN : $headers");
Utils().showPostingDialog(context);
var stream = new http.ByteStream(DelegatingStream.typed(image.openRead()));
var length = await image.length();
var url =
Uri.parse("${APIServices.HTTP_DOMAIN}${APIServices.POST_ADD_NEW}");
debugPrint("TOKEN : $stream");
debugPrint("TOKEN : $length");
debugPrint("TOKEN : $url");
final request = http.MultipartRequest("POST", url);
debugPrint("TOKEN : $request");
debugPrint("TOKEN : $image");
debugPrint("TOKEN : ${image.path}");
var multipartFile =
new http.MultipartFile('file', stream, length, filename: image.path);
debugPrint("TOKEN : ${multipartFile.contentType}");
request.fields['caption'] = caption;
request.headers.addAll(headers);
request.files.add(multipartFile);
var response = await request.send();
debugPrint("TOKEN : ${response.request}");
print(response.statusCode);
// listen for response
response.stream.transform(utf8.decoder).listen((value) {
print(value);
});
}
答案 0 :(得分:0)
在错误请求期间通常会看到Http错误500。 我建议您使用Postman尝试完全相同的请求并查看结果,您也可以尝试打印出response.message消息,该消息有时可以告诉您格式化请求时出错了。
更多建议:尝试使用DIO包,在其中格式化请求要简单得多,您可以一次设置标头,还可以正确格式化错误,并且提供了许多非常有用的高级功能。