Express multer在req.file上返回未定义

时间:2018-08-08 20:13:44

标签: javascript reactjs express multer

我试图将文件传递到节点,并且express不会将其存储在req.body中,所以我正在使用multer中间件,但是每当登录req.file时,我都无法定义。我不确定自己在做什么错。

react / 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"
    />
  );
}

node / index.js

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

3 个答案:

答案 0 :(得分:2)

您可以使用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 });
};

答案 1 :(得分:1)

我认为您需要按照以下表格数据类型上传文件。

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

希望它会有所帮助。

答案 2 :(得分:1)

另一个输入多个文件的示例。在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);
    });
}