I wanna ask how can I post an image file to the MySQL using post method? Since what I did is only upload the file pathway and not the image.
my post request:
Future addProduct() async{ var url = 'http://10.0.2.2/foodsystem/addproduct.php'; http.post(url, body: { "productname": controllerName.text, "productprice": controllerPrice.text, "producttype": controllerType.text, "product_owner": globals.userId, "image": _image.path, //"image": _image.path.split('/').last, });
my PHP code:
<?php include 'conn.php'; $product_owner = $_POST['product_owner']; $productname = $_POST['productname']; $productprice = $_POST['productprice']; $producttype = $_POST['producttype']; $image = $_POST['image']; //$realImage = base64_decode($image); $connect->query("INSERT INTO product (product_name, product_price, product_type, product_owner, image) VALUES ('".$productname."','".$productprice."','".$producttype."','".$product_owner."','".$image."')") ?>
my MySQL table
Answer
This is the solution that I use to upload the image to the database. Basically, I am using the image path to save into MySQL. Then the image itself I save it in the htdoc folder and it works.
Flutter code: (important library need to be imported first)
import "package:async/async.dart"; import 'package:path/path.dart'; import 'dart:io'; import 'package:http/http.dart' as http; Future addProduct(File imageFile) async{ // ignore: deprecated_member_use var stream= new http.ByteStream(DelegatingStream.typed(imageFile.openRead())); var length= await imageFile.length(); var uri = Uri.parse("http://10.0.2.2/foodsystem/uploadg.php"); var request = new http.MultipartRequest("POST", uri); var multipartFile = new http.MultipartFile("image", stream, length, filename: basename(imageFile.path)); request.files.add(multipartFile); request.fields['productname'] = controllerName.text; request.fields['productprice'] = controllerPrice.text; request.fields['producttype'] = controllerType.text; request.fields['product_owner'] = globals.restaurantId; var respond = await request.send(); if(respond.statusCode==200){ print("Image Uploaded"); }else{ print("Upload Failed"); }
PHP code:
<?php include 'conn.php'; $image = $_FILES['image']['name']; $product_owner = $_POST['product_owner']; $productname = $_POST['productname']; $productprice = $_POST['productprice']; $producttype = $_POST['producttype']; $imagePath = "uploads/".$image; move_uploaded_file($_FILES['image']['tmp_name'],$imagePath); $connect->query("INSERT INTO product (product_name, product_price, product_type, product_owner, image) VALUES ('".$productname."','".$productprice."','".$producttype."','".$product_owner."','".$image."')"); //$connect->query("INSERT INTO product (product_name,image) VALUES ('".$productname."','".$image."')"); ?>
Result in MySQL:
Result in htdoc folder: