如何將flutter上的圖片上傳到MySQL

我是flutter的新手。有人能告訴我如何上傳圖片到我的MySQL嗎?在過去的幾周里我找不到任何解決辦法。

My Code:

import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:http/http.dart' as HTTP;
import 'package:image_picker/image_picker.dart';
import 'package:phpfood/OwnerPage.dart';
import 'globals.dart' as globals;
import 'dart:async';

class AddProduct extends StatefulWidget {
  @override
  _AddProductState createState() => _AddProductState();
}

class _AddProductState extends State<AddProduct> {

  TextEditingController controllerName = new TextEditingController();
  TextEditingController controllerPrice = new TextEditingController();
  TextEditingController controllerType = new TextEditingController();

  File _image;

  Future getImageGallery() async{
    // ignore: deprecated_member_use
    var imageFile = await ImagePicker.pickImage(source: ImageSource.gallery);
    setState(() {
      _image = imageFile;
    });
  }
  Future getImageCamera() async{
    // ignore: deprecated_member_use
    var imageFile = await ImagePicker.pickImage(source: ImageSource.camera);
    setState(() {
      _image = imageFile;
    });
  }

 Future addProduct() async{

    var url = 'http://10.0.2.2/foodsystem/addproduct.php';
    //String base64Image = base64Encode(_image.readAsBytesSync());
    //String fileName = _image.path.split("/").last;


    http.post(url, body: {
      "productname": controllerName.text,
  "productprice": controllerPrice.text,
  "producttype": controllerType.text,
  "product_owner": globals.restaurantId,
  //"image": base64Image,
  //"imageName": fileName,
  "image": _image.path,
  //"image": _image.path.split('/').last,
});
  }
 /* 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.userId;

var respond = await request.send();
if(respond.statusCode==200){
  print("Image Uploaded");
}else{
  print("Upload Failed");
    }

  }*/

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text("ADD PRODUCT"),),
      body: Padding(
        padding: const EdgeInsets.all(10.0),
        child: ListView(
          children: [
        new Column(
          children: [
            SizedBox(
              height: 25,
            ),
            Container(
              height: 230,
              width: 250,
              child: Center(
                child: _image == null
                ? new Text("No Image Selected!") : new Image.file(_image),
              ),
            ),
            Padding(
              padding: const EdgeInsets.only(left: 110),
              child: Row(
                children: [
                  RaisedButton(
                    child: Icon(Icons.image),
                    color: Colors.red.shade200,
                    onPressed: getImageGallery,
                  ),
                  RaisedButton(
                    child: Icon(Icons.camera_alt),
                    color: Colors.red.shade200,
                    onPressed: getImageCamera,
                  ),
                ],
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text("Product Name", style: TextStyle(fontSize: 18),),
            ),
            Padding(
              padding: const EdgeInsets.only(left:10,right:10,top:0,bottom:0 ),
              child: Container(
                decoration: BoxDecoration(
                    border: Border.all(color: Colors.grey),
                    borderRadius: BorderRadius.circular(15)),
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: TextFormField(
                    controller: controllerName,
                    textAlign: TextAlign.center,
                    decoration: InputDecoration(
                      hintText: 'Nasi Lemak Kerang',
                      border: InputBorder.none,
                    ),
                  ),
                ),
              ),
            ),
            /*new TextField(
              controller: controllerName,
              decoration: new InputDecoration(
                hintText: "Nasi Lemak Kerang",
              ),
            ),*/
            SizedBox(
              height: 10,
            ),
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text("Product Price (RM)", style: TextStyle(fontSize: 18),),
            ),
            Padding(
              padding: const EdgeInsets.only(left:10,right:10,top:0,bottom:0 ),
              child: Container(
                decoration: BoxDecoration(
                    border: Border.all(color: Colors.grey),
                    borderRadius: BorderRadius.circular(15)),
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: TextFormField(
                    controller: controllerPrice,
                    textAlign: TextAlign.center,
                    autocorrect: true,
                    decoration: InputDecoration(
                        border: InputBorder.none,
                        counterText: '',
                        hintText: '12'),
                    inputFormatters: [
                      FilteringTextInputFormatter.digitsOnly,
                      //LengthLimitingTextInputFormatter(11)
                    ],
                    maxLength: 11,
                  ),
                ),
              ),
            ),
            /*new TextField(
              controller: controllerPrice,
              decoration: new InputDecoration(
                  hintText: "12",
              ),
            ),*/
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text("Product Type", style: TextStyle(fontSize: 18),),
            ),
            Padding(
              padding: const EdgeInsets.only(left:10,right:10,top:0,bottom:0 ),
              child: Container(
                decoration: BoxDecoration(
                    border: Border.all(color: Colors.grey),
                    borderRadius: BorderRadius.circular(15)),
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: TextFormField(
                    controller: controllerType,
                    textAlign: TextAlign.center,
                    decoration: InputDecoration(
                      hintText: 'breakfast, lunch, dinner',
                      border: InputBorder.none,
                    ),
                  ),
                ),
              ),
            ),
            /*new TextField(
              controller: controllerType,
              decoration: new InputDecoration(
                  hintText: "breakfast, lunch, dinner",
              ),
            ),*/
            new Padding(padding: const EdgeInsets.all(10.0),),

            /*new RaisedButton(
              child: new Text("ADD PRODUCT"),
              color: Colors.red,
              onPressed: (){
                addProduct(_image);
              }
            ),*/

            new RaisedButton(
                child: new Text("ADD PRODUCT"),
                color: Colors.red,
                onPressed: (){
                  addProduct();
                  Navigator.of(context).push(
                      MaterialPageRoute(builder: (BuildContext context)=> OwnerPage(username: globals.userName, user_id: globals.userId)));
                },
            ),
            /*FloatingActionButton(
              onPressed: (){
                return showDialog(
                  context: context,
                  builder: (context){
                    return AlertDialog(
                      content: Text(controllerPrice.text),
                    );
                  },
                );
              },
            )*/

          ],

        ),
      ],
    ),
  ),
);
  }
}

我的PHP代碼:

<?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."')")


?>

MySQL database:

它只把我的圖像路徑上傳到數據庫。請幫幫我。我已經理解了“image”:_image.path,這段代碼是我的數據庫保存圖像路徑而不是照片的原因。我已經嘗試使用路徑位置搜索并將圖像保存到htdoc文件中,但在上載圖像時不起作用。在htdoc中找不到圖像。請幫幫我。

? 最佳回答:

查看如何在Flutter上傳圖片的答案?有關從flutter上載文件的詳細信息。您需要使用http庫中的MultipartRequest

google搜索還應該向您展示如何將文件保存到MySQL,可能是一個blob。它本身就是一個完整的主題,您可能最終會將文件保存到文件系統并將路徑存儲在數據庫中。

主站蜘蛛池模板: 精品无码成人片一区二区| 亚洲男人的天堂一区二区| 成人欧美一区二区三区在线视频 | 色狠狠色噜噜Av天堂一区| 内射女校花一区二区三区| 免费一区二区三区| 国产一区二区在线|播放| 91亚洲一区二区在线观看不卡| 午夜一区二区免费视频| 亚洲无线码在线一区观看| 麻豆AV天堂一区二区香蕉| 久久久久久综合一区中文字幕| 免费在线视频一区| 蜜桃无码AV一区二区| 亚洲一区精品伊人久久伊人| 亚洲爆乳精品无码一区二区| 久久亚洲国产精品一区二区| 痴汉中文字幕视频一区| 爱爱帝国亚洲一区二区三区| 在线播放一区二区| 国产a∨精品一区二区三区不卡 | 精品人妻少妇一区二区三区在线| 国产一区二区三区播放心情潘金莲 | 国产主播一区二区| 一区二区视频在线免费观看| 亚洲欧洲专线一区| 中文激情在线一区二区| 精品福利一区二区三区免费视频| 亚洲综合色一区二区三区| 亚洲伦理一区二区| 中文字幕av无码一区二区三区电影| 无码国产伦一区二区三区视频| 亚洲av无码一区二区三区不卡 | 亚洲日韩精品一区二区三区| 国产一区二区精品久久岳√| 午夜视频在线观看一区| 无码日韩AV一区二区三区| 精品一区二区三区AV天堂| 无码av不卡一区二区三区| 亚洲av无码天堂一区二区三区| 国产精品视频第一区二区三区|