【问题标题】:How can I upload file from React to Express server?如何将文件从 React 上传到 Express 服务器?
【发布时间】:2020-07-24 01:14:10
【问题描述】:

我在将文件从 react 上传到服务器端时遇到了一些问题,你能告诉我它必须如何正确制作吗?

Bellow,我试图解释我想要做什么......

这是前端的样子:

uploadFile(e) {
  let file = e.target.files[0];
  axios.post("/uploadFileAPI", file);
}
<input type="file" onChange={this.uploadFile()} />

这是后端

router.post("/uploadFileAPI", (req, res) => {
  console.log(req.body.file); //Just need to console log fetched files here or it's path maybe
});

我希望你明白我想要做什么。你能告诉我一个应该如何正确实施的例子吗?谢谢

【问题讨论】:

    标签: node.js reactjs express axios


    【解决方案1】:

    进行以下更改。

    <input type="file" onChange={this.uploadFile} />
    
    import axios from 'axios';
    uploadFile(event){
      const data = new FormData() ;
      data.append('file', event.target.files[0]);
      axios.post("${apiUrl}/uploadFileAPI", data)
          .then(res => { // then print response status
            console.log(res.statusText)
          })
    }
    

    api端

    const multer = require('multer');
    const storage = multer.diskStorage({
        destination: (req, file, callBack) => {
            callBack(null, 'uploads')
        },
        filename: (req, file, callBack) => {
            callBack(null, `${file.originalname}`)
        }
      })
    let upload = multer({ dest: 'uploads/' })
    const server = express();
    server.post('/uploadFileAPI', upload.single('file'), (req, res, next) => {
        const file = req.file;
        console.log(file.filename);
        if (!file) {
          const error = new Error('No File')
          error.httpStatusCode = 400
          return next(error)
        }
          res.send(file);
      })
    

    要了解此信息,请参阅 https://www.youtube.com/watch?v=-Hvmj8yXfyU

    【讨论】:

    • 是的,但是后端呢?
    • 你需要使用multer。更新了我的答案
    【解决方案2】:

    您正在调用onChange 中的函数。您需要传递函数引用。

    <input type="file" onChange={this.uploadFile} /> // remove the parenthesis i.e. ()
    

    编辑基于评论:

    为了在后端接收文件,您可以使用 multerexpress-fileupload 之类的库。 Multer是一个受欢迎的选择。网上有很多资源可以从前端和后端的角度为您提供帮助。 例如,请参阅这些:

    【讨论】:

    • 但是,如何从后端获取数据?
    猜你喜欢
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2022-12-15
    • 2023-04-09
    相关资源
    最近更新 更多