gpt4 book ai didi

node.js - 类型错误 : path must be a string or Buffer MEAN stack

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:55 26 4
gpt4 key购买 nike

我在前端使用 Angular 5,在后端使用 Node,并使用 Mongo 作为数据库。现在我试图将图像保存到数据库,但不断收到此错误。我不知道我是在正面还是背面犯了错误,因为这是我第一次处理文件。我做了我的研究,但它主要指向 Angular 1.x。

HTML 组件

  <form [formGroup]="form" (ngSubmit)="onSubmitPhoto()">
<div class="form-group">
<input type="file" class="form-control" formControlName="photo">
</div>
<button class="btn btn-default" type="submit">Sačuvaj</button>
</form>

TS 组件

onSubmitPhoto() {
this.profile.photo = this.form.value.photo;
this.usersService.updatePhoto(this.profile, this.id)
.subscribe(
data => {
this.router.navigateByUrl('/');
},
error => console.error(error)
);
}

服务

updatePhoto(profile: Profile, id: string) {
const body = new FormData();
body.append('photo', profile.photo);
const headers = new Headers({ 'Content-Type': 'application/json' });
return this.http.post('http://localhost:3000/profile/photo/' + id, body, { headers: headers })
.map((response: Response) => response.json())
.catch((error: Response) => {
return Observable.throw(error.json());
});
}

Node.JS

   router.post('/photo/:id', (req, res) => {
console.log(req.files);
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 = fs.readFileSync(req.files);
user.img.contentType = 'image/png';
user.save((err, obj) => {
if (err) {
throw err
}
console.log('success')
})
});
});

型号

const schema = new Schema({
img: { data: Buffer, contentType: String}
});
module.exports = mongoose.model('User', schema);

感谢任何帮助。另外,记录 req.files 返回未定义。

最佳答案

要上传文件,您需要将其包装在 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 编码的表单,您将需要使用一些中间件在后端解析请求,如 expressjs doc 中所述。

您可以使用multerexpress-fileupload

如果您选择第二个,您将需要以下内容:

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')
})
});
});

关于node.js - 类型错误 : path must be a string or Buffer MEAN stack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47993664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com