تحميل صورة المستخدم على حسابه الإنشاء باستخدام Express JS؟[مغلق]
-
21-12-2019 - |
سؤال
أنا جديد على Node Js وأقوم بإنشاء تطبيق بسيط حيث سيقوم المستخدم بإنشاء حساب يحتوي على التفاصيل وقد استخدمت mongodb في الواجهة الخلفية لتخزين تفاصيل المستخدم واسمه والبريد الإلكتروني وما إلى ذلك.
بعد إنشاء حساب، أقوم بإعادة توجيهه إلى صفحة تسجيل الدخول حيث يتعين على المستخدم تسجيل الدخول وعند نجاح تسجيل الدخول، ستتم إعادة توجيه المستخدم إلى الملف الشخصي حيث أعرض اسمه الآن باستخدام الجلسات.
ما أريده الآن هو، أريد تحميل صورة المستخدم عند إنشاء الحساب وأتساءل كيف سأربطها بنموذج إنشاء حسابي كما هو موضح في لقطة الشاشة أثناء حفظها في mongodb.
أريد إظهار صورة هذا المستخدم كصورة للملف الشخصي عندما يقوم المستخدم بتسجيل الدخول وسيتم إعادة توجيهه إلى صفحة ملفه الشخصي.
لقد وجدت العديد من الروابط حول حفظ الصورة على mongodb ولكن لم أتمكن من الحصول على أي مساعدة وأرفق أيضًا لقطة شاشة لصفحة الملف الشخصي.
كيف يمكنني تنفيذ هذا؟
الصفحة الشخصية
المحلول
إذا كنت تريد حقًا حفظ صورة الملف الشخصي في MongoDB.أقترح عليك أن تمر متى يجب علي استخدام GridFS؟
ثم حدد الحد الأقصى لحجم صورة الملف الشخصي التي ستسمح للمستخدم بتحميلها
مونجودب بيسون الحد الأقصى للمستندات هو 16 ميجابايت.لذا، إذا كان إجمالي مستند المستخدم بالكامل لا يتجاوز 16 ميجابايت، فيمكنك تخزينه مباشرة في مستندك باستخدام BinData نوع البيانات.
الصور/مقاطع الفيديو/PDF/Ppt/جداول البيانات وما إلى ذلك - لا يهم أبدًا، يمكن تخزينها بنفس الطريقة.الأمر متروك لتطبيقك لإرجاع نوع المحتوى المناسب في الرأس لعرضه بشكل صحيح في تطبيق الويب الخاص بك.
ترميز سعيد..:)
تحديث:للقيام بذلك، تحتاج إلى تشفير بيانات الصورة باستخدام base64 كما يلي:
var base64Image = new Buffer(uploadedFilesData, 'binary').toString('base64');
ثم قم بتخزينه باستخدام Mongo's BinData
اكتب، ثم سيتم حفظه كمصفوفة بت BSON، وليس تخزينه فعليًا base64
سلسلة، لذلك لن يزيد الحجم عن الصورة الثنائية الأصلية.وعندما تقرأ من MongoDB وتريد أن تكون بمثابة صورة، يمكنك القيام بما يلي:
app.get('/getimage', function(req, res) {
db.collection.find({'imgId':req.params.id}, function(err,data) {
var base64Image = var img = new Buffer(data.imgDataField, 'base64');
res.writeHead(200, {
'Content-Type': 'image/jpeg',
'Content-Length': base64Image.buffer.length
});
res.end(base64Image.buffer);
}
}
جانب العميل الذي يجب عليك إظهاره base64Image
البيانات شيء من هذا القبيل:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAB50RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNS4xqx9I6wAAAVBJREFUOI2tlLFKA0EQhr+9i2J1kBDFYG91gYRA0ngpJELQ2KSwlFjYKIidlZVvIFgEXyBYaBH0ESysLATBPiRYWFgEye7eWkSimL1wyg1MM//Mx87O7ghjjCEhc5ICJQ5LRQm9/oDLqzsenl4QgAHK/ir7O5us5JatNcJ2Z73+gKOzCz6kQjguQoAxYELNwlyK89NDK9DaZrvTZTiS4LggBAYBQoDjMhxJ2p1u/DbvH59xU/MYrac0Y8Z6bJgJDaEF9FOPDdNKMev1hVrFh2XTHq9v75GwpYxnjVsH0GrW0UqhtZ52pWg16/FhjVpANu2Ngb88m/Zo1IL4MICg5FthQcmPKomGVSsFpJQopSYupaRaKUTCIr9TuZhnq76O47iTWBhqysX832EA1ze3COf78LnFDBzvRebP3BrbG2tfUx23eXKwOyvd/tH/a4nus083fKdxIODDXwAAAABJRU5ErkJggg==" />