如何使用 expressjs 在 React 中上传图像

Posted

技术标签:

【中文标题】如何使用 expressjs 在 React 中上传图像【英文标题】:How to upload an image in React with expressjs 【发布时间】:2019-04-18 00:36:14 【问题描述】:

我尝试在 React 中使用 express 上传具有强大功能的图像,以将图像路径保存到数据库中。我阅读了这些教程:sequelize crud with expressjs 和Simple File Upload with Express.js and Formidable in Node.js 我遇到的问题是我无法混合从 React 上传图像并将 URL 保存到数据库中。

我的 React 代码中有这个用于设置状态:

picture(e)
    this.setState(
        picture:e.target.files[0]
    );
    console.log(e.target.files[0]);

在我的 render() 方法中,我只是处理它:

<input type="file" onChange=this.picture className="form-control-file" placeholder="Picture" name="picture"/>

进入我的控制器我有这个代码:

exports.create = (req, res) =>     
    // Save to mysql database
    var form = new formidable.IncomingForm();
    var fileName;
    form.parse(req);
    form.on('fileBegin', function (name, file)
        fileName='/home/public_html/react-panel/img/' + file.name;
        file.path = '/home/public_html/react-panel/img/' + file.name;
        console.log('fileBegin ' + fileName);
    );
    form.on('file', function (name, file)
        console.log('Uploaded ' + file.name);
    );
    StrongDish.create(  
            id: req.body.id,
            name: req.body.name,
            description: req.body.description,
            picture: fileName,
            category: req.body.category,
            price: req.body.price
    ).then(strongDish =>      
        // Send created customer to client
        res.send(strongDish);
    );
;

数据库中除ima文件外的其他数据一直保存

为了发帖,我只是用 redux 调用一个动作来发送状态数据

export const addStrongDish=dish=>async dispatch=>
    const response = await axios.post('http://www.my-domain.co.cr/api/dish/add/',dish);
    dispatch(
        type:ADD_DISH,
        payload:response.data
    )

【问题讨论】:

【参考方案1】:

从反应表单最好使用formData,这允许您将图像和其余数据从表单发送到您的操作中的函数。

然后使用 axios,您必须使用 axios.post(url, formdata) 之类的方式发送到您的数据库。

这是我使用 react redux express mongodb 的解决方案。

how to post image in react-redux using formdata and send to nodejs

【讨论】:

感谢您的评论。对不起我的英语。【参考方案2】:

我修复了这个问题,用multer替换了强大的

【讨论】:

以上是关于如何使用 expressjs 在 React 中上传图像的主要内容,如果未能解决你的问题,请参考以下文章

如何从 expressjs 发送 jwt 令牌以响应应用程序? [关闭]

如何在 ExpressJS 中使用 axios?

从 React->ExpressJS->Postgres 修补 Postgres JSONB 列的最佳方法是啥?

服务器渲染的 React ExpressJS 前端泄露用户的 Redux 存储数据

如何在 React 中使用 fetch 和表单数据发布对象?

如何使用 Xampp 作为 localhost 在大于 2mb 的 wordpress 中上传主题