【问题标题】:Uploading a file with express-fileupload doesn't work使用 express-fileupload 上传文件不起作用
【发布时间】:2021-05-28 09:13:37
【问题描述】:

我正在尝试在 Node js 中使用 express-fileupload (express-fileupload) 上传文件。 但我还没有成功。

我的 app.js(我的 express 服务器运行的地方)如下所示:

const express = require('express');
const exphbs = require('express-handlebars');
const fileUpload = require('express-fileupload');

const app = express();
const port = 5000;

app.use(fileUpload({
  debug: true
}));

app.use(express.static('./upload'));

const routes = require('./server/routes/task');
app.use('/', routes);

app.listen(port, () => console.log(`Listening on port ${port}`));

我的 task.js(我的路线所在的位置)如下所示:

const express = require('express');
const router = express.Router();
const taskController = require('../controllers/taskController');

router.post('/admin/fileUpload', taskController.fileUpload);

module.exports = router;

我的 taskController.js(我的路由被控制的地方)如下所示:

exports.fileUpload = (req, res) => {

  let sampleFile;
  let uploadPath;

  if (!req.files || Object.keys(req.files).length === 0) {
    res.render('admin', { error: `No files were uploaded!` });
  } else {
    sampleFile = req.files.sampleFile;
    uploadPath = __dirname + '/upload/' + sampleFile.name;
    sampleFile.mv(uploadPath, function (err) {
      if (err) throw err;
      res.render('admin', { alert: `File ${sampleFile.name} successfully uploaded!` });
    }
  }
}

我的 admin.hbs(我也在使用 express-handlebars)如下所示:

<form method="POST" action="/admin/fileUpload">
  <h2>Upload File</h2>
  <input type="file" enctype="multipart/form-data" name="sampleFile">
  <button type="submit">
</form>

所以,当我启动 express 服务器时,我的日志是这样的:

[nodemon] starting `node app.js`
Listening on port 5000
Express-file-upload: Request is not eligible for file upload!

我试图找出问题几个小时,但还没有任何运气。

【问题讨论】:

    标签: node.js express express-handlebars express-fileupload


    【解决方案1】:

    所以,我花了一段时间,但我发现了我的问题。

    我在表单和上传路径中犯了两个小错误。

    <form method="POST" action="/admin/fileUpload">
     <h2>Upload File</h2>
     <input type="file" enctype="multipart/form-data" name="sampleFile">
     <button type="submit">
    </form>
    

    错了。我在错误的地方添加了“enctype”。它应该在表单中,而不是在输入字段中。

    我的表单的解决方案:

    <form method="POST" action="/admin/fileUpload" enctype="multipart/form-data">
     <h2>Upload File</h2>
     <input type="file" name="sampleFile">
     <button type="submit">
    </form>
    

    我的上传路径的解决方案:

    而不是

    uploadPath = __dirname + '/upload/' + sampleFile.name;
    

    我需要这样做

    uploadPath = './upload/' + sampleFile.name;
    

    【讨论】:

      猜你喜欢
      • 2018-01-31
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 2015-07-09
      • 1970-01-01
      • 2018-10-16
      相关资源
      最近更新 更多