اذهب إلى المحتوى
  • 0

مشكلة حفظ الصور flutter

Flutter Dev

السؤال

السلام عليكم ورحمة الله وبركاته 

تحيه طيبه للجميع 

قمت بعمل كود لجلب الصور من الاستوديو وحفظها في قاعدة بيانات mysql 

الكود شغال بشكل عام ولكن توجد مشكله لم استطع ايجاد حل لها

الصور يتم حفظها في مجلد الصور ولكن لا تظهر احصل على  الرسالة التاليه:

60a187b81c0f4_2021-05-17005836.png.e8b297a3ace35a65e2b96b1e419f6aa4.png

وهذا شكل الصور في المجلد

60a187c5484e5_2021-05-17005909.png.bd59fe2094eb7890ffbe5d39d0b21a10.png

 

ايضا الاسم في قاعدة البيانات يتكرر يعني لو عملت اول صورتين الامور رح تمشي تمام ولكن لو عملت اربع اسماء رح احصل على اثنان مع ان المفترض يكون الاسم مختلف مثال بشكل التالي:

http://******/PHP/admin/upload_pic/thumb_file_0.png
http://******/PHP/admin/upload_pic/thumb_file_1.png
http://******/PHP/admin/upload_pic/thumb_file_0.png
http://******/PHP/admin/upload_pic/thumb_file_1.png

 

 

الكود المستعمل كامل كالتالي:

<?php
		$photo_url= $_POST['photo_url'];

   $NameImage = $_POST['NameImage'];

	include 'connt.php';

		$path = "upload_pic/$NameImage.png";

		$actualpath = "http://*********/PHP/admin/$path";


$sql = "INSERT INTO  photos (photo_url) VALUES (?)";		

$stmt = $con->prepare($sql); 

$stmt->bind_param("s",$actualpath);

$stmt->execute();

$result = $stmt->get_result();
		

	//	if(mysqli_query($conn,$sql)){

			file_put_contents($path,base64_decode($photo_url));

			echo "Successfully Uploaded";

	//	}

		

	$stmt->close();

?> 

 

 



void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
 
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: StoreAddScreen(),
    );
  }
}

class StoreAddScreen extends StatefulWidget {
  StoreAddScreen({Key key}) : super(key: key);

  @override
  _StoreAddScreenState createState() => _StoreAddScreenState();
}

class _StoreAddScreenState extends State<StoreAddScreen> {
  List<String> photoPaths = List<String>();
  final picker = ImagePicker();

  static final String uploadEndPoint =
      'http://**********/PHP/admin/rest/AddNewCategrytesttodelete.php';



  void SaveDate() async {

      for (int i = 0; i < photoPaths.length; i++) {
        if (photoPaths[i].runtimeType == String) {
          String strPath = sprintf("thumb_file_%d", [i]);
   
          var url = uploadEndPoint;
          var response = await http.post(url, body: {
            "photo_url": photoPaths[i],
            "NameImage": strPath,

          });
          if (response.statusCode == 200) {

          } else {}

        }

      }

  }
  static const int MAX_PHOTO_UPLOAD = 5;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SingleChildScrollView(
      child: Column(
        children: [
          SizedBox(
            width: double.infinity,
            height: 300.0,
            child: Expanded(
              child: Padding(
                padding: EdgeInsets.all(20),
                child: SingleChildScrollView(
                  child: SizedBox(
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.start,
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Padding(
                          padding: const EdgeInsets.only(top: 10),
                          child: SizedBox(
                            height: 140,
                            child: Row(
                              children: [
                                Expanded(
                                  child: Container(
                                    decoration: BoxDecoration(
                                      color: Theme.of(context)
                                          .textTheme
                                          .bodyText1
                                          .color,
                                      borderRadius: BorderRadius.circular(8),
                                    ),
                                    child: ListView.builder(
                                      itemCount: photoPaths.length,
                                      scrollDirection: Axis.horizontal,
                                      itemBuilder:
                                          (BuildContext context, int index) {
                                        return InkWell(
                                          child: Padding(
                                              padding: EdgeInsets.only(
                                                  top: 8.0,
                                                  bottom: 8.0,
                                                  left: 8.0,
                                                  right: 8.0),
                                              child: Container(
                                                  height: 140,
                                                  width: 140,
                                                  child: ClipRRect(
                                                    borderRadius:
                                                        BorderRadius.circular(
                                                            8),
                                                    child: AspectRatio(
                                                      aspectRatio: 1.2,
                                                      child: Image.file(
                                                        File(photoPaths[index]),
                                                        fit: BoxFit.cover,
                                                        width: 300,
                                                        height: 300,
                                                      ),
                                                    ),
                                                  ))),
                                          onTap: () {
                                            showDialog(
                                              context: this.context,
                                              child: new AlertDialog(
                                                content: new FlatButton(
                                                  child:
                                                      new Text("delete_photo"),
                                                  onPressed: () => setState(() {
                                                    photoPaths.removeAt(index);
                                                  }),
                                                ),
                                              ),
                                            );
                                          },
                                        );
                                      },
                                    ),
                                  ),
                                ),
                                Padding(
                                  padding: const EdgeInsets.only(
                                      left: 10, right: 10),
                                  child: Container(
                                      width: 50,
                                      height:
                                          MediaQuery.of(context).size.height,
                                      decoration: BoxDecoration(
                                        color: Theme.of(context).accentColor,
                                        borderRadius: BorderRadius.circular(8),
                                      ),
                                      child: Material(
                                        color: Theme.of(context).accentColor,
                                        borderRadius: BorderRadius.circular(8),
                                        child: InkWell(
                                            borderRadius:
                                                BorderRadius.circular(8),
                                            child: Icon(
                                              Icons.add_a_photo,
                                              color: Theme.of(context)
                                                  .floatingActionButtonTheme
                                                  .foregroundColor,
                                            ),
                                            onTap: () async {
                                              if (photoPaths.length ==
                                                  MAX_PHOTO_UPLOAD) {
                                                showDialog(
                                                  context: this.context,
                                                  child: new AlertDialog(
                                                    content: new FlatButton(
                                                      child: new Text(
                                                          "max_photos_reached"),
                                                    ),
                                                  ),
                                                );
                                              }
                                              PickedFile pickedFile =
                                                  await picker.getImage(
                                                      source:
                                                          ImageSource.gallery,
                                                      imageQuality: 90);
                                              setState(() {
                                                if (pickedFile != null) {
                                                  photoPaths
                                                      .add(pickedFile.path);
                                                }
                                              });
                                            }),
                                      )),
                                )
                              ],
                            ),
                          ),
                        ),
                        Padding(
                          padding: const EdgeInsets.only(top: 16),
                          child: Center(
                            child: FlatButton(
                              color: Theme.of(context).accentColor,
                              // controller: _btnController,
                              onPressed: SaveDate,
                              child: Text(
                                ("addd"),
                                style: TextStyle(
                                  fontWeight: FontWeight.w500,
                                  color: Theme.of(context)
                                      .floatingActionButtonTheme
                                      .foregroundColor,
                                ),
                              ),
                            ),
                          ),
                        ),
                        SizedBox(
                          height: 50,
                        ),
                      ],
                    ),
                  ),
                ),
              ),
            ),
          ),
        ],
      ),
    ));
  }
}

ياليت اذا احد يعرف سبب المشكله يساعدنا ولكم جزيل الشكر

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

إن حفظ الملفات بنفس الاسم يؤدي لحذف الملفات القديمة أو عدم حفظ الجديدة.

لذلك وليكون اسم الملف مميز وغير مكرر نضيف له قيمة الوقت:

$path = "upload_pic/_" . time() . "_$NameImage";

سبب مشكلة عدم فتح الصور ربما بسبب تغيير اللاحقة لكل الصور إلى PNG في المسار.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 8 دقائق مضت قال مروان مروان3:

مرحبا اخي @بلال زيادة

قمت بتجربه / بعد الازاله 

الكمبيوتر لا يعترف على الصور بمعنى لم يصبحو ملفات صور

مرفق لك صوره:

هل يمكنك إيضا تغيير السطر التالي 

await picker.getImage(source:ImageSource.gallery,imageQuality: 90);

إلى 

await picker.pickImage(source:ImageSource.gallery,imageQuality: 90);

و أخباري بالنتيجة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ الآن قال مروان مروان3:

مرحبا اخي قمت بتجربه واصبح الكود بشكل التالي كامل ولكن المشكله مثل ما هيا لم تحل


 File pickedFile =
                                              await ImagePicker.pickImage(source:ImageSource.gallery,imageQuality: 90);

 

يرجى رفع ملفات مشروعك كاملاً بشكل مضغوط. ربما هناك بعض المشاكل.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 22 دقائق مضت قال بلال زيادة:

هل يمكنك إزالة png. من السطر التالي 


$path = "upload_pic/$NameImage";

ومن ثم إخباري بالنتيجة.

مرحبا اخي @بلال زيادة

قمت بتجربه / بعد الازاله 

60a1938c21b3a_2021-05-17014830.png.0d4836fc6cd7d6f59b500e150a6284c5.png

الكمبيوتر لا يعترف على الصور بمعنى لم يصبحو ملفات صور

مرفق لك صوره:

 

بتاريخ 8 دقائق مضت قال Wael Aljamal:

إن حفظ الملفات بنفس الاسم يؤدي لحذف الملفات القديمة أو عدم حفظ الجديدة.

لذلك وليكون اسم الملف مميز وغير مكرر نضيف له قيمة الوقت:


$path = "upload_pic/_" . time() . "_$NameImage";

سبب مشكلة عدم فتح الصور ربما بسبب تغيير اللاحقة لكل الصور إلى PNG في المسار.

 مرحبا اخي الكريم @Wael Aljamal

قمت بتغير ووضع الوقت ولكن المشكله نفسها

مرفق لك صوره:

60a194187c02f_2021-05-17015138.png.8876103a347c0810e377ce3e075e4883.png

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال بلال زيادة:

هل يمكنك إيضا تغيير السطر التالي 


await picker.getImage(source:ImageSource.gallery,imageQuality: 90);

إلى 


await picker.pickImage(source:ImageSource.gallery,imageQuality: 90);

و أخباري بالنتيجة.

مرحبا اخي قمت بتجربه واصبح الكود بشكل التالي كامل ولكن المشكله مثل ما هيا لم تحل

 File pickedFile =
                                              await ImagePicker.pickImage(source:ImageSource.gallery,imageQuality: 90);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 7 دقائق مضت قال بلال زيادة:

يرجى رفع ملفات مشروعك كاملاً بشكل مضغوط. ربما هناك بعض المشاكل.

 مرفق ملفات المشروع كامله مع قاعدة البيانات تفضل:

 

to.rar

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 39 دقائق مضت قال مروان مروان3:

اهلا بك اخي بطبع تفضل

 

to.rar

عذراً أخي , هل تقوم بتحديث ملفات مشروعك لتتناسب مع flutter 2  ومن ثم تقوم برفعها مرة أخرى لأنه يوجد لدي flutter 2 و الملفات ليست متوافقة معها لذلك أرجوا تحديثها لأنه لو قمت بالرجوع إلى الإصدار الغير flutter 2 سأفقد الكثير من مشاريعي لذلك يجرى تحديث مشروعك و إرفاقه مجدداً.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 18 دقائق مضت قال بلال زيادة:

عذراً أخي , هل تقوم بتحديث ملفات مشروعك لتتناسب مع flutter 2  ومن ثم تقوم برفعها مرة أخرى لأنه يوجد لدي flutter 2 و الملفات ليست متوافقة معها لذلك أرجوا تحديثها لأنه لو قمت بالرجوع إلى الإصدار الغير flutter 2 سأفقد الكثير من مشاريعي لذلك يجرى تحديث مشروعك و إرفاقه مجدداً.

طيب اخي ساقوم بذلك

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 ساعات قال مروان مروان3:

طيب اخي ساقوم بذلك

اهلا اخي @بلال زيادة

اعتذر على التاخر بس لني كنت مطر احدث كل شي انا اتعامل مع الاصدار قبل فلاتر 2 

قمت بتحديث المشروع الان مرفق لك ياليت تطلع عليه لو تكرمت

to.rar

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...