Flutter dio 图像上传不起作用抛出服务器 500 错误,但在邮递员中有效
Flutter dio image upload not working throws server 500 error, but works in postman
这是我的邮递员请求,带有 header auth
令牌。
我正在尝试上传图片,一切都按照 dio 文档中提到的设置进行设置,并且与邮递员参数完全相同,但是抛出了 500 错误,在这里找不到任何错误。被困在这里大概3个小时了。
请找出任何错误,我被困在这里谢谢! (ps:postaman 文件只接受图像文件,即 jpg、png 其他不包括图像的文件也会抛出与应用程序抛出的 500 错误相同的错误)
我的 dio 请求是:
Future requestChangePhoto(
String wardenToken, String wardenId, File imageFile) async {
String fileName = imageFile.path.split('/').last;
print(fileName);
print(getWardenPhotoChange);
FormData data = FormData.fromMap({
"wardenId": "${wardenId.trim()}",
"photo": await MultipartFile.fromFile(imageFile.path,
filename: fileName, contentType: MediaType("image", "jpg")),
});
Dio dio = new Dio();
dio.options.headers['content-Type'] = 'application/json';
dio.options.headers["authorization"] = "$wardenToken";
await dio
.post("$getWardenPhotoChange", data: data)
.then((response) => print(response.data));
}
这是我的 ImagePicker
和请求:
var imageFile = await ImagePicker.pickImage(source: imageType == ImageType.camera? ImageSource.camera: ImageSource.gallery,
imageQuality: 50, maxHeight: 500, maxWidth: 500
);
print(imageFile);
NetworkHandler networkHandler = NetworkHandler();
networkHandler.requestChangePhoto(xybaData.WardenToken, xybaData.wardernId, imageFile);
这是我的错误:
自最近更新以来,content-type
未被 Dio
视为 "normal" header。我的意思是它忽略了 header.
要使其正常工作,请改为设置 dio.options.contentType
属性。
总结一下,而不是这个:
dio.options.headers['content-Type'] = 'application/json';
试试这个:
dio.options.contentType = 'application/json';
奖金:
创建 Dio
实例时,您可以像这样将 BaseOptions
传递给它的构造函数:
Dio dio = Dio(
BaseOptions(
headers: {"authorization": wardenToken},
contentType = "application/json",
)
);
我相信这是一种更简洁的做事方式:D
这是我的邮递员请求,带有 header auth
令牌。
我正在尝试上传图片,一切都按照 dio 文档中提到的设置进行设置,并且与邮递员参数完全相同,但是抛出了 500 错误,在这里找不到任何错误。被困在这里大概3个小时了。
请找出任何错误,我被困在这里谢谢! (ps:postaman 文件只接受图像文件,即 jpg、png 其他不包括图像的文件也会抛出与应用程序抛出的 500 错误相同的错误)
我的 dio 请求是:
Future requestChangePhoto(
String wardenToken, String wardenId, File imageFile) async {
String fileName = imageFile.path.split('/').last;
print(fileName);
print(getWardenPhotoChange);
FormData data = FormData.fromMap({
"wardenId": "${wardenId.trim()}",
"photo": await MultipartFile.fromFile(imageFile.path,
filename: fileName, contentType: MediaType("image", "jpg")),
});
Dio dio = new Dio();
dio.options.headers['content-Type'] = 'application/json';
dio.options.headers["authorization"] = "$wardenToken";
await dio
.post("$getWardenPhotoChange", data: data)
.then((response) => print(response.data));
}
这是我的 ImagePicker
和请求:
var imageFile = await ImagePicker.pickImage(source: imageType == ImageType.camera? ImageSource.camera: ImageSource.gallery,
imageQuality: 50, maxHeight: 500, maxWidth: 500
);
print(imageFile);
NetworkHandler networkHandler = NetworkHandler();
networkHandler.requestChangePhoto(xybaData.WardenToken, xybaData.wardernId, imageFile);
这是我的错误:
自最近更新以来,content-type
未被 Dio
视为 "normal" header。我的意思是它忽略了 header.
要使其正常工作,请改为设置 dio.options.contentType
属性。
总结一下,而不是这个:
dio.options.headers['content-Type'] = 'application/json';
试试这个:
dio.options.contentType = 'application/json';
奖金:
创建 Dio
实例时,您可以像这样将 BaseOptions
传递给它的构造函数:
Dio dio = Dio(
BaseOptions(
headers: {"authorization": wardenToken},
contentType = "application/json",
)
);
我相信这是一种更简洁的做事方式:D