Плохой запрос в django при отправке сообщения с помощью flutter
Я пытаюсь сделать пост-запрос с изображением и текстом. Я следовал видео, но конечная точка, используемая с fakeapi, работает нормально с flutter. Мой api работает нормально с postman, но при выполнении с flutter он показывает плохой запрос. Помогите мне!!!
Model.py
class TestImageUpload(models.Model): image = models.ImageField(upload_to = "products/",blank=True, null=True)
Serializer.py
class TestImage(serializers.ModelSerializer):
class Meta:
model = TestImageUpload
fields = "__all__"
Views.py
class TestImageView(ListCreateAPIView):
try:
serializer_class = TestImage
def perform_create(self, serializer):
serializer.save()
response_msg = {'error': False}
return Response(response_msg)
except:
response_msg = {'error': True}
urls.py
path('addimage/', TestImageView.as_view(),name= 'add_image_view'),
Код флаттера
class UploadImageScreen extends StatefulWidget {
static const routeName = '/image-upload';
const UploadImageScreen({Key? key}) : super(key: key);
@override
State<UploadImageScreen> createState() => _UploadImageScreenState();
}
class _UploadImageScreenState extends State<UploadImageScreen> {
File? image;
final _picker = ImagePicker();
bool showSpinner = false;
Future getImage() async {
final pickedFile =
await _picker.pickImage(source: ImageSource.gallery, imageQuality: 80);
if (pickedFile != null) {
image = File(pickedFile.path);
setState(() {});
} else {
print("no image selected");
}
}
Future<void> uploadImage() async {
setState(() {
showSpinner = true;
});
var stream = http.ByteStream(image!.openRead());
stream.cast();
var length = await image!.length();
var uri = Uri.parse('http://10.0.2.2:8000/api/addimage/');
var request = http.MultipartRequest('POST', uri);
// request.fields['title'] = "Static Tile";
var multiport = http.MultipartFile('image', stream, length);
request.files.add(multiport);
var response = await request.send();
print(response.stream.toString());
if (response.statusCode == 200) {
setState(() {
showSpinner = false;
});
print("Image uploaded");
} else {
setState(() {
showSpinner = false;
});
print("Image uploade fail");
}
// print(e);
}
@override
Widget build(BuildContext context) {
return ModalProgressHUD(
inAsyncCall: showSpinner,
child: Scaffold(
appBar: AppBar(title: Text("Upload Image")),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
InkWell(
onTap: () => getImage(),
child: Container(
child: image == null
? const Center(
child: Text('Pick Image'),
)
: Container(
child: Center(
child: Image.file(File(image!.path).absolute,
height: 200, width: 200, fit: BoxFit.cover),
),
),
),
),
const SizedBox(
height: 150,
),
InkWell(
onTap: () {
uploadImage();
},
child: Container(
height: 50,
width: 200,
color: Colors.green,
child: Center(child: Text("Upload")),
),
),
],
),
),
);
}
}