تحميل صورة المستخدم على حسابه الإنشاء باستخدام Express JS؟[مغلق]

StackOverflow https://stackoverflow.com//questions/23039861

سؤال

أنا جديد على Node Js وأقوم بإنشاء تطبيق بسيط حيث سيقوم المستخدم بإنشاء حساب يحتوي على التفاصيل وقد استخدمت mongodb في الواجهة الخلفية لتخزين تفاصيل المستخدم واسمه والبريد الإلكتروني وما إلى ذلك.

بعد إنشاء حساب، أقوم بإعادة توجيهه إلى صفحة تسجيل الدخول حيث يتعين على المستخدم تسجيل الدخول وعند نجاح تسجيل الدخول، ستتم إعادة توجيه المستخدم إلى الملف الشخصي حيث أعرض اسمه الآن باستخدام الجلسات.

ما أريده الآن هو، أريد تحميل صورة المستخدم عند إنشاء الحساب وأتساءل كيف سأربطها بنموذج إنشاء حسابي كما هو موضح في لقطة الشاشة أثناء حفظها في mongodb.

أريد إظهار صورة هذا المستخدم كصورة للملف الشخصي عندما يقوم المستخدم بتسجيل الدخول وسيتم إعادة توجيهه إلى صفحة ملفه الشخصي.

لقد وجدت العديد من الروابط حول حفظ الصورة على mongodb ولكن لم أتمكن من الحصول على أي مساعدة وأرفق أيضًا لقطة شاشة لصفحة الملف الشخصي.

كيف يمكنني تنفيذ هذا؟enter image description here

الصفحة الشخصية

enter image description here

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

المحلول

إذا كنت تريد حقًا حفظ صورة الملف الشخصي في 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==" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top