Express multer 在 req.file 上返回 undefined

Posted

技术标签:

【中文标题】Express multer 在 req.file 上返回 undefined【英文标题】:Express multer is returning undefined on req.file 【发布时间】:2019-01-16 04:54:19 【问题描述】:

我正在尝试将文件传递给节点,并且 express 不会将其存储在 req.body 中,因此我正在使用 multer 中间件,但每当我登录 req.file 时,我都会变得不确定。我不确定我做错了什么。

反应/index.js

fileSelectHandler = e => 
  axios.post("/api/upload",  profilePic: e.target.files[0] );
  this.setState( profilePic: e.target.files[0] );
;

render() 
  return (
    <input
      onChange=event => this.fileSelectHandler(event)
      name="profilePic"
      type="file"
    />
  );

节点/index.js

app.post("/api/upload", upload.single("profilePic"), (req, res) =>
  console.log(req.file)
);

【问题讨论】:

【参考方案1】:

您可以改用FormData 来上传文件。

fileSelectHandler = e => 
  const formData = new FormData();
  const profilePic = e.target.files[0];

  formData.append("profilePic", profilePic);

  axios.post("/api/upload", formData);
  this.setState( profilePic );
;

【讨论】:

【参考方案2】:

我认为您需要将文件作为表单数据类型上传,如下所示。

fileSelectHandler = e => 
const formData = new FormData();
formData.append(‘profilePic’,e.target.files[0]);

const config = 
    headers:
        ‘content-type’:’multipart/form-data’
        
    
axios.post("/api/upload", formData, config);
this.setState( profilePic: e.target.files[0] );
;

希望对您有所帮助。

【讨论】:

【参考方案3】:

另一个多文件输入的例子。在 Express JS 上测试

function uploadImages(post) 
    return new Promise((resolve, reject) => 
        const formData = new FormData();
        for( var i = 0; i < post.length; i++ )
            formData.append('multifiles', post[i]);
        
        let jsonPost = 
            method: POST_REQUEST,
            url: UPLOAD_FILE_URL,
            data: formData,
            headers: 
                'content-type': 'multipart/form-data',
            
        ;
        fetchData(jsonPost)
            .then(res => 
                console.log("RESULT uploadImages: ", res.data);
                resolve(res.data);
            )
            .catch(reject);
    );

【讨论】:

以上是关于Express multer 在 req.file 上返回 undefined的主要内容,如果未能解决你的问题,请参考以下文章

尽管创建了文件对象,但 Multer req.file 始终未定义

multer上传图片

在控制器内使用Express和Multer解析请求

使用 Multer 将带有 fetch 的图像上传到 Express

Multer 返回 req.file 未定义

Req.file 在尝试使用 multer 和 cloudinary 上传图片时返回 [object, object]