Flutter 无法使用dio post请求上载图像
我正在尝试将带有标题的照片上载到RESTAPI。但由于这是我第一次,我得到了一些例外。我上传图像的代码如下所示:Flutter 无法使用dio post请求上载图像,flutter,dio,Flutter,Dio,我正在尝试将带有标题的照片上载到RESTAPI。但由于这是我第一次,我得到了一些例外。我上传图像的代码如下所示: Dio dio = new Dio(); dio.options.headers['content-Type'] = 'multipart/form-data'; dio.options.headers['Authorization'] = 'Token ${box.get('token')}'; FormData formData = For
Dio dio = new Dio();
dio.options.headers['content-Type'] = 'multipart/form-data';
dio.options.headers['Authorization'] = 'Token ${box.get('token')}';
FormData formData = FormData.fromMap({
"author": box.get('user_id'),
"description": _caption,
"image": MultipartFile.fromFileSync(_image.path,
filename: _image.path.split(Platform.pathSeparator).last)
});
dio
.post("$baseURL/posts/create/",
data: formData,
options:
Options(method: 'POST', responseType: ResponseType.plain))
.then((response) => print(response))
.catchError((error) => print(error));
在我的设备上运行此程序并尝试上载图像后,它会将我引导到dio.dart包行抛出错误(e,选项)代码>
如果你有任何使用dio上传图片的知识,请帮助解决它
更新:json正文
{
"author": null,
"description": "",
"image": null
}
更新:我尝试使用另一个服务上载图像(不是dio)
//字符串到uri
var uri=uri.parse($baseURL/posts/create/);
//创建多部分请求
var-request=http.MultipartRequest(“POST”,uri);
//添加带有Auth令牌的头
映射头={
“授权”:“令牌${box.get('Token')}”,
“内容类型”:“多部分/表单数据”
};
request.headers.addAll(headers);
//添加字段
映射字段={
“author”:box.get('user_id').toString(),
“说明”:,
};
request.fields.addAll(字段);
//接受文件的多部分
var multipartFile=http.multipartFile(
“文件”,
_image.readAsBytes().asStream(),
_image.lengthSync(),
文件名:_image.path.split('/')。最后,
contentType:MediaType('image','jpeg'),
);
//将文件添加到多部分
request.files.add(多部分文件);
打印(request.toString());
//发送
var response=wait request.send();
打印(响应状态码);
//倾听回应
response.stream.transform(utf8.decoder).listen((值){
印刷品(价值);
});
我也尝试过用上面的代码上传图片。但这会返回一个错误,显示“image”:[“未提交任何文件”。]
您可以尝试以下操作:
import 'package:dio/dio.dart';
FormData data = FormData.fromMap({
"image": await MultipartFile.fromFile(_image.path,
filename: fileName, contentType: MediaType("image", "jpeg")),
"author": box.get('user_id'),
"description": _caption,
});
Dio dio = Dio();
Response response = await dio
.post("$baseURL/posts/create/",
data: data,
options: Options(
headers: {
'Authorization':'Token ${box.get('token')}',
},
), onSendProgress: (int sent, int total) {
debugPrint(
"sent : ${sent.toString()}" + " total : ${total.toString()}");
})
.whenComplete(() => {debugPrint("complete:")})
.catchError((onError) {
debugPrint("error:${onError.toString()}");
});
可以添加json的主体吗?我将其添加到上述代码中。这就是你的意思吗?是的,没错。我的问题是给你的。是否有其他服务用于上载文件并返回下载链接?或者没有。是的,我也尝试过使用该代码,但它给了我错误
“image”:[“未提交任何文件”。]
。你可以检查上面的代码。不,这不是我的意思,那么数据库中的数据类型图像是什么?这不起作用。这给了我一个我一开始就得到的例外<代码>抛出错误(e,选项)代码>嗯,您的问题不在代码中,请确保后端的接收是正确的。我建议您在添加dataWell时分开上传,我的后端开发人员说他没有任何问题)。我想我得自己想办法了
import 'package:dio/dio.dart';
FormData data = FormData.fromMap({
"image": await MultipartFile.fromFile(_image.path,
filename: fileName, contentType: MediaType("image", "jpeg")),
"author": box.get('user_id'),
"description": _caption,
});
Dio dio = Dio();
Response response = await dio
.post("$baseURL/posts/create/",
data: data,
options: Options(
headers: {
'Authorization':'Token ${box.get('token')}',
},
), onSendProgress: (int sent, int total) {
debugPrint(
"sent : ${sent.toString()}" + " total : ${total.toString()}");
})
.whenComplete(() => {debugPrint("complete:")})
.catchError((onError) {
debugPrint("error:${onError.toString()}");
});