سؤال

أحاول تحميل الصورة إلى MySQL باستخدام إطار اللعب 2.

في إطار اللعب 1.24، أستخدم "play.db.jpa.Blob" و "multipart/form-data" لتحميل صورة إلى الخلية.

ولكن في إطار اللعب 2 لا يوجد Blob...كيف يمكنني تحميل الصورة باستخدام "multipart/form-data" إلى الخلية؟

هل كانت مفيدة؟

المحلول

يجب عليك بالتأكيد لا تخزين ملفاتك إلى قاعدة بيانات.هذه فكرة سيئة.بدلاً من ذلك، يجب عليك تحميل ملفاتك إلى نظام ملفات محلي أو بعيد وحفظ اسم الملف/مسار الملف فقط في قاعدة البيانات الخاصة بك.

يحرر : نظرًا لأن إجابتي تم التصويت عليها بشكل سلبي، سأحاول تقديم المزيد من التوضيح:

  1. أولاً، عند العمل مع أنواع Blob في إطار عمل Play، سيتم إنشاء حقل BLOB في قاعدة البيانات الخاصة بك.ولكن، ليست كل قواعد البيانات لديها نفس التنفيذ وراء نوع النقطة.في بعض أنظمة RDMS، سيكون لنوع Blob مساحة تخزين محدودة وفي أنظمة أخرى (مثل MySQL) سيتم تحديد الحد الأقصى لحجم حقل blob الخاص بك عن طريق التكوين.

  2. ثانيًا، عندما تقوم باسترداد ملفاتك من قاعدة البيانات وإرسالها إلى المستخدم، سوف يزداد استخدام الذاكرة لديك بشكل كبير.بكل بساطة، يقوم Play بتحميل حقل النقطة الكبيرة في الذاكرة قبل إرساله إلى المستخدم.

  3. بالإضافة إلى ذلك، إذا كان لديك الكثير من الملفات المخزنة في قاعدة البيانات الخاصة بك، فسيتم تحميلها بشكل زائد بسرعة كبيرة.(الطلبات).خطوتك التالية هي نقل قاعدة البيانات على جهاز جديد.ولكن إذا كان لديك الكثير من البيانات المخزنة، فقد لا يكون عنق الزجاجة التالي هو قاعدة البيانات، بل النطاق الترددي بين تطبيقك وخادم قاعدة البيانات.

  4. سيكون استخدام قاعدة البيانات لتخزين الملفات دائمًا أبطأ ويستهلك ذاكرة أكبر من القراءة المباشرة لنظام الملفات بسبب العبء الزائد الذي تنشئه قاعدة البيانات.

يعد استخدام قاعدة البيانات الخاصة بك كمحرك لتخزين الملفات حلاً سهلاً وسريع الإعداد ولكنه مليء بالمضايقات التي قد تغير الأمور حقًا لاحقًا أثناء مشروعك.

نصائح أخرى

طريقة أخرى، يمكنك تخزين مرجع للصورة في قاعدة البيانات.

في رؤيه:

<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
           Photo<input type="file" name="photo"> <br>
             <input type="submit" value="Submit">    
</form>

في وحدة التحكم:

MultipartFormData body = request().body().asMultipartFormData();
            FilePart photo = body.getFile("photo");
            if (photo != null) {
                String fileName = photo.getFilename();
                File file = photo.getFile();
                File newFile = new File(play.Play.application().path().toString() + "//public//uploads//"+ "_" + fileName);
                file.renameTo(newFile); //here you are moving photo to new directory          
                System.out.println(newFile.getPath()); //this path you can store in database
            }
}

هذا هو ما يتعامل معه كائن Blob بشكل شفاف.يقوم بتخزين الملف في نظام الملفات وتخزين مرجع في قاعدة البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top