我正在尝试使用Flutter的http插件上传图像。
以下是我的代码
Future<ImageUploadModel> postImage(File photoPath) async {
ImageUploadModel imageUploadModel;
var request = http.MultipartRequest(
"POST", Uri.parse("my_api_url"));
request.files.add(http.MultipartFile.fromBytes(
"photo", await File.fromUri(Uri.parse(photoPath.path)).readAsBytes(),
contentType: MediaType('image', 'jpg')));
final response = await request.send();
Uint8List responseByteArray = await response.stream.toBytes();
return standardSerializers.deserializeWith(ImageUploadModel.serializer, json.decode(utf8.decode(responseByteArray)));
}
我尝试使用邮递员上传图像,图像已正确上传。
我已经点击了堆栈上的链接,但我无法解决错误
颤振:http 发布上传图片颤动如何将多个文件发送到http帖子如何在飞镖/颤动中将图像发送到 api?如何在颤振中上传图片?
我得到的状态代码为 200,但是当我尝试从响应访问任何变量时,我得到空字符串。
我尝试使用Kotlin和Retrofit使用本机Android,它工作正常
我也尝试了Dio
库
Dio dio = Dio();
FormData formdata = FormData();
formdata.add("photo", UploadFileInfo(photoPath, basename(photoPath.path)));
dio
.post("My_API_URL",
data: formdata,
options: Options(
method: 'POST',
responseType: ResponseType.json // or ResponseType.JSON
))
.then((response) {
print("2 $response");
return standardSerializers.deserializeWith(
ImageUploadModel.serializer, json.decode(response.data));
}).catchError((error) => print("3 $error"));
我不想将我的图像转换为base64
我终于想通了。以下代码对我有用。
var request = http.MultipartRequest(
"POST", Uri.parse("MY_API_URL"));
var multipartFile = await http.MultipartFile.fromPath(
"photo", photoPath.path,
contentType: MediaType('image', 'jpeg'));
request.files.add(multipartFile);
http.StreamedResponse response = await request.send();
var responseByteArray = await response.stream.toBytes();
return ImageUploadModel.fromJson(
json.decode(utf8.decode(responseByteArray)));
只需根据您的要求更改媒体类型
响应是一个流,因此是异步的。在imageUploadModel
获得分配给它的值之前,您正在返回它。尝试以下代码:
Uint8List responseByteArray = await response.stream.toBytes();
return standardSerializers.deserializeWith(ImageUploadModel.serializer, json.decode(utf8.decode(responseByteArray)));