【发布时间】:2020-01-27 19:09:39
【问题描述】:
几天来我一直在努力让这件事发挥作用。 这个 POST 方法是上传一个应该是“文件”和标题的图像。 API 要求:
PAYLOAD:
- caption
- image
HEADER
- AUTHENTICATION
我是 Flutter 的新手,我已经学习了很多教程,但似乎没有任何效果。
这是我的代码:
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);
});
}
【问题讨论】:
标签: image post flutter dart flutter-layout