微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 File 对象在我从前端发送到后端时发生了变化?

如何解决为什么 File 对象在我从前端发送到后端时发生了变化?

我在前端使用 react,后端使用 nodejs,我正在使用 react-admin 为我的网站创建管理员,该网站基本上是一个商店,我正在尝试创建新产品并保存它在数据库中,一切正常,但我上传图像时遇到问题。 在一天结束时,我们知道图像是一个文件,所以当我在 fornt-end 中打印文件时,我得到了这个:

File {path: "usersForm.png",name: "usersForm.png",lastModified: 1616064578818,lastModifiedDate: Thu Mar 18 2021 11:49:38 GMT+0100 (Central European Standard Time),webkitRelativePath: "",…}
lastModified: 1616064578818
lastModifiedDate: Thu Mar 18 2021 11:49:38 GMT+0100 (Central European Standard Time) {}
name: "usersForm.png"
path: "usersForm.png"
size: 156658
type: "image/png"
webkitRelativePath: ""
__proto__: File

顺便说一下,这是在数据提供程序中定义的创建函数

reate: (resource,params) => {
    
    console.log(params.data.Images[0].rawFile);// this shows the file object 

    httpClient(`${apiUrl}/${resource}/Create`,{
      method: "POST",body: JSON.stringify(params.data),}).then(({ json }) => ({
      data: { ...params.data,id: json._id },}));
  },

现在,如果您查看 create 函数,您可以看到它发送了一个带有自定义数据 (params.data) 的 post 请求,因此当后端 (nodejs) 收到此数据时,当我收到此数据时打印以查看我得到的文件

{ path: 'usersForm.png' }

这就是我控制台.log文件的方式:

  console.log(req.body.Images[0].rawFile);

我想要前端的文件,其中包含所有信息,以便我可以使用 multer 保存我想要的位置。 我的问题:为什么文件在发送后发生了变化?
如果我做错了什么,你可以指导你可以告诉我正确的道路。

解决方法

这个问题的解决方案是发送带有表单数据的文件
在数据提供者的创建中添加这个

 const formData = new FormData();

  for ( const param in params.data ) {

    // 1 file
    if (param === 'Images') {
      formData.append('file',params.data[param].rawFile);
      continue
    }

    // when using multiple files
    if (param === 'files') { // files remplace with your params data 
      params.data[param].forEach(file => {
        formData.append('files',file.rawFile);
      });
      continue
    }

    formData.append(param,params.data[param]);
  }

  return httpClient(`myendpoint.com/upload`,{
    method: "POST",body: formData,// but in body formdata 
  }).then(({ json }) => ({ data: json });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。