Để tải lên một tệp, bạn cần phải bao bọc tệp đó trong một FormData
ví dụ như sau:
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());
});
}
Hơn nữa, chương trình phụ trợ của bạn rất có thể bị lỗi trong phần sau:
user.img.data = fs.readFileSync(req.body.photo);
Xem xét rằng bạn hiện đang tải lên biểu mẫu có multipart/form-data
mã hóa, bạn sẽ cần sử dụng một số phần mềm trung gian để phân tích cú pháp yêu cầu trong phần phụ trợ của mình như đã nêu trong tài liệu expressjs
Bạn có thể sử dụng multer hoặc express-fileupload
Nếu bạn đi với thứ hai, bạn sẽ cần những thứ sau:
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')
})
});
});