嘿伙计们,当我尝试上传文件时,我遇到了一个非常奇怪的 GridF 行为:
所以我用formdata发送我要上传的文件和将在文件的元数据中设置的代码,文件被正确保存并且原始名称字段总是添加到元数据中,但代码字段是req.body参数有一个非常奇怪的行为。
文件.ts
uploadFileFormSubmit(event) {
const formData = new FormData();
formData.append('file', event.target.files.item(0));
formData.append('code', this.courseCode);
this.fileService.uploadFile(formData).subscribe(res => ....
文件服务.ts
uploadFile(data): Observable<GeneralResponse> {
return this.http.post<GeneralResponse>('/files/uploadFile', data);
}
这是后端部分:
files.js(后端)
const storage = new GridFsStorage({
url: dbUrl,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString('hex') + path.extname(file.originalname);
console.log(req.body)
const code = JSON.parse(JSON.stringify(req.body));
console.log(code)
const fileInfo = {
filename: filename,
metadata: {
originalname: file.originalname,
materialCode: code.code
},
bucketName: 'files'
};
resolve(fileInfo);
});
});
}
});
如您所见,我解析 req.body 以获取我的属性(我在这里找到了这个解决方案,因为 req.body 是 [Object: null prototype] { code: 'myCode'} )
请注意,有 2 个 console.logs(在 JSON.parse() 之前和之后
第一个对象 null 是 excel 文件,第二个是 pdf,第三个是 jpg 文件,第四个是 png 文件
也许它与扩展有关,但我无法想象为什么 req.body 有时会被解析并且代码会进入元数据但其他时候不会:/ 那么是什么导致这种行为?提前感谢您的帮助:D