جافاسكريبت - إرجاع اسم ملف تم رفعه باستخدام مولتر و Node.js
أنا أقوم بإنشاء تطبيق بسيط كخبرة تعليمية باستخدام Ionic 2، والذي يتصل بخادم Node يعمل مع Multer لرفع الصور. المشكلة التي أواجهها هي أنني بحاجة إلى الحصول على اسم الملف النهائي من Multer وإعادته إلى التطبيق الذي قام برفعه، لحفظه محليًا. أنا أستخدم وحدات Auth و User من @ionic/cloud-angular للمصادقة ومعلومات المستخدم. يحتوي كائن User على كائن details به أشياء مثل "name" و"email" و"username" و"image" ... لذا، عند رفع صورة إلى خادم Node وحفظها بواسطة Multer، أحتاج إلى الحصول على اسم الملف هذا وإعادته إلى التطبيق حتى أتمكن من تحديث خاصية user.details.image.
إليك نسخة بسيطة من خادمي النود...
var express = require('express');
var http = require('http');
var bodyParser = require('body-parser');
var multer = require('multer');
var cors = require('cors');
var postStorage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, './uploads');
},
filename: function(req, file, callback) {
let fileName = '', postName;
if(typeof req.body.postName !== "undefined") {
postName = req.body.postName.toLowerCase().replace(/ /g, '-');
filename += postName;
}
fileName += new Date().getTime();
fileName += ".png";
callback(null, fileName);
}
});
var app = express();
app.set('port', process.env.PORT || 3000);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cors());
app.post('/upload', function(req, res) {
var uploadPost = multer({storage: postStorage}).single('post_image');
uploadPost(req, res, function(err) {
if(err) {
return res.end("error uploading file");
}
res.end("file uploaded");
});
});
app.listen(app.get('port');
console.log("app listening on port: " _ app.get('port'));
هل هناك طريقة لجعلها تعيد اسم الملف النهائي الذي حفظه multer؟ شيء مثل res.json({fileName: fileName}); res.end(); أنا حقًا لا أعلم في هذه المرحلة، وكل الدروس التي أستطيع أن أجدها عن multer تشرح فقط كيفية إنشاء اسم ملف جديد وحفظ ملف على القرص أو في قاعدة البيانات أو في الذاكرة، لكن في أي مكان لا يُوضَح كيف يمكنك فعليًا الحصول على هذا الاسم الملف وإرجاعه إلى التطبيق الذي قام برفعه. شكرًا مقدمًا على أي مساعدة، أنا أقدرها حقًا. إذا كنت بحاجة لرؤية كود Ionic 2 الذي يرفع الملفات، يرجى إعلامي وسأقوم بتحديث المنشور بذلك الكود أيضًا. شكرًا.
الإجابة رقم 1
إذا كنت تقوم بتحميل ملف واحد، يمكنك الحصول على اسم الملف باستخدام req.file.filename
إذا قمت بتحميل ملفات متعددة req.files
بمجرد أن تحصل على اسم الملف، يمكنك إرساله إلى العميل باستخدام res.send({filename:FileName});