1

嘿伙计们,当我尝试上传文件时,我遇到了一个非常奇怪的 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

4

0 回答 0