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

مشكلة validation error faild to cast to string عند رفع عدة صور في express.js nodejs

Ali Shouaa

السؤال

السلام عليكم , 

يظهر لي هذا الخطأ عندما أريد أن أرفع مصفوفة من الصور كما أسلفتم لماذا ؟

router.post('/add-image',uploadArray.array('avatar', 12), async (req, res, next) => {

    const image = new Home({

        avatar: req.files  })

    await image.save();

    res.status(201).json({ message: "add new just image", imageId: image._id })})

---------------------------------------------------------------------------------------

Model : 

const homeSchema = new Schema({

    avatar: [{ type: String}],

    created_at: {

        type: Date,

        default: Date.now},})

---------------------------------------------------------------------------------------

uploadArray : 

const multer  = require('multer');

const path = require('path')



/**

 * Handel multipart/form-data.   الوصول للتخزين

 */

const storage = multer.diskStorage({

    destination: 'uploads',

    filename: function (req, file, cb) {

        cb(null, Date.now() + path.extname(file.originalname))

    }

});



/**

 * User profile middleware.    رفع الصورة

 */

const uploadArray = multer({

    limits: { fileSize: 1024 * 1024 },

    storage: storage ,

    fileFilter: (req, file, cb) => {

        let fileTypes = /jpeg|jpg|png/;

        let mimeType = fileTypes.test(file.mimetype);

        let extname = fileTypes.test(path.extname(file.originalname).toLowerCase());

        if (mimeType && extname)  return cb(null, true);

        cb(new Error('غبر مسموح رفع هذا الملف'));

    },

});

module.exports = uploadArray

error.jpg

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

Recommended Posts

  • 0
بتاريخ 16 دقائق مضت قال Ali Shouaa:

avatar: req.files

أعتقد الخطأ في هذا السطر، حيث أن avatar تقبل مصفوفة من السلاسل النصية، و أنت تمرر لها مصفوفة من أغراض الملفات، حاول استخدام دالة JSON.stringify لتحويل مصفوفة الملفات لسلسلة نصية.

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

  • 0

أنت تقوم بحفظ مصفوفة من الكائنات objects (كل صورة عبارة عن كائن)، وعليك أن تقوم بتحويل مصفوفة الملفات req.files إلى مصفوفة من مسارات الصور:

let imagesPaths = [];
for(avatar of req.files['avatar']) {
  imagesPaths.push(avatar.path);
}

// ثم نقوم بحفظ المصفوفة في قاعدة البيانات
const image = new Home({
  avatar: imagesPaths
});
await image.save()

 

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

  • 0
بتاريخ 8 ساعات قال سامح أشرف:

أنت تقوم بحفظ مصفوفة من الكائنات objects (كل صورة عبارة عن كائن)، وعليك أن تقوم بتحويل مصفوفة الملفات req.files إلى مصفوفة من مسارات الصور:


let imagesPaths = [];
for(avatar of req.files['avatar']) {
  imagesPaths.push(avatar.path);
}

// ثم نقوم بحفظ المصفوفة في قاعدة البيانات
const image = new Home({
  avatar: imagesPaths
});
await image.save()

 

قمت بكتابتها اخي و لكن يظهر هذا الخطأ

(node:13072) UnhandledPromiseRejectionWarning: TypeError: req.files.avatar is not iterable

انا أجربها من postman  هل في هذا اشكال ؟

صصص.jpg

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

  • 0
بتاريخ 13 دقائق مضت قال Ali Shouaa:

قمت بكتابتها اخي و لكن يظهر هذا الخطأ

(node:13072) UnhandledPromiseRejectionWarning: TypeError: req.files.avatar is not iterable

انا أجربها من postman  هل في هذا اشكال ؟

إن كنت تستعمل أحدث إصدار من multer، فحاول تجربة الكود التالي:

let imagesPaths = [];

for (avatar of req.files) {
  imagesPaths.push(avatar.path);
}

console.log(imagesPaths);	// طباعة مسارات الصور المرفوعة

بهذا الشكل سوف تحصل على مسارات الصور ليتم حفظها من خلال الكود التالي:

const image = new Home({
  avatar: imagesPaths
});

await image.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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...