किसी फ़ाइल को अपलोड करने के लिए आपको उसे FormData
. में लपेटना होगा उदाहरण इस प्रकार है:
interface Profile {
photo: File;
}
updatePhoto(profile: Profile, id: string) {
const body = new FormData();
body.append('photo',profile.photo);
return this.http.post(`http://localhost:3000/profile/photo/${id}`, body,)
.map((response: Response) => response.json())
.catch((error: Response) => {
return Observable.throw(error.json());
});
}
इसके अलावा, आपका बैकएंड निम्न अनुभाग में विफल होने की सबसे अधिक संभावना है:
user.img.data = fs.readFileSync(req.body.photo);
यह ध्यान में रखते हुए कि अब आप multipart/form-data
के साथ एक फ़ॉर्म अपलोड कर रहे हैं एन्कोडिंग, आपको अपने बैकएंड में अनुरोध को पार्स करने के लिए कुछ मिडलवेयर का उपयोग करने की आवश्यकता होगी जैसा कि एक्सप्रेसजेएस डॉक्टर
आप multer का इस्तेमाल कर सकते हैं या एक्सप्रेस-फाइलअपलोड
यदि आप दूसरे के साथ जाते हैं, तो आपको निम्नलिखित की आवश्यकता होगी:
const fileUpload = require('express-fileupload');
router.use(fileUpload());// use express-fileupload as default parser for multipart/form-data encoding
router.post('/photo/:id', (req, res) => {
User.find({ _id: req.params.id })
.exec((err, user) => {
if (err) {
return res.status(500).json({
title: 'An error occured',
error: err
});
}
user.img.data = req.files.photo.data;
user.img.contentType = 'image/png';
user.save((err, obj) => {
if (err) {
throw err
}
console.log('success')
})
});
});