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

السؤال

نشر (معدل)

هل من الممكن تخزين الصور أو حتى الفيديو كما هي في قاعدة البيانات بدلاً من فقط تخزين مسار وجودها على الخادم؟ لقد لاحظت أن المستندات في mongodb لها سعة تخزين محددة، ولكن أرغب بتخزين بعض الصور ضمن قاعدة البيانات. فهل يجب أن أقوم بتقسم الملفات على أكثر من مستند بهذه الحالة؟ وماهي الطريقة لتخزين هكذا ملفات في mongodb؟ 

تم التعديل في بواسطة Tamim Fahed

Recommended Posts

  • 0
نشر

عندما نقوم بالتخزين فهناك نوعين للتخزين وهما تخزين البيانات ،وتخزين الملفات وطرق تخزين كلاً منهما تختلف عن الآخرى ويفضل عدم استخدام الملفات في قواعد البيانات لأن هذا ليس عملي 

يمكنك تخزين ملفات أو صور في mongodb ويسمى بمستند BSON لكن الحد الأقصى لحجم الملف هو 16 ميجا أي إذا كان حجم الملف أكبر فيجب عليك تقسيمه لأجزاء بحجم 16 ميجا لكي تستطيع حفظه في mongodb ويمكنك حفظها كنوع BinData أي بيانات ثنائية ، ويمكنك إستخدام GridFs لتخزين الملفات الذي حجمها يتجاوز 16 ميجا

String newFileName = "my-image";
// إنشاء ملف صورة
File imageFile = new File("/users/victor/images/image.png");
/*
 إنشاء
 GridFS
 بإسم صورة
*/
GridFS gfsPhoto = new GridFS(db, "photo");
GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile);
gfsFile.setFilename(newFileName);
// حفظ الملف
gfsFile.save();

 

  • 0
نشر

يمكنك إستعمال مكتبة multer

Multer عبارة عن برمجية وسيطة node.js للتعامل مع بيانات متعددة الأجزاء / النموذج ، والتي تُستخدم أساسًا لتحميل الملفات. إنه مكتوب فوق  busboy لتحقيق أقصى قدر من الكفاءة.

var express = require(‘express’);
var fs = require(‘fs’);
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var multer = require('multer'); //  multer تضمين مكتبة 


//   الإتصال بالخادم
mongoose.connect(‘url_here’);

// تحديد مخطط قاعدة البيانات
var Item = new ItemSchema({ 
    img: { 
       data: Buffer, 
       contentType: String 
    }
 }
);
var Item = mongoose.model('Books',ItemSchema);

// middleware Multer  باستخدام 
//لتحميل الصورة على جانب الخادم   .  

app.use(multer({ dest: ‘./uploads/’,
  rename: function (fieldname, filename) {
    return filename;
  },
}));

// إرسال الطلب للخادم وحفظ الصورة

app.post(‘/api/photo’,function(req,res){
  var newItem = new Item();
  newItem.img.data = fs.readFileSync(req.files.userPhoto.path)
  newItem.img.contentType = image/png’;
  newItem.save();
});

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...