获取由 nodejs 中的 multer 发送的文件?

get the file which send by the multer in nodejs?

这是我的 upload.js 代码:

var multer = require('multer');
var express = require('express');
const router = express.Router();

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads');
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now());
  },
});

var upload = multer({ storage: storage });

router.post('/', upload.single('file'), (req, res, next) => {
  const file = req.file;
  if (!file) {
    const error = new Error('Please upload a file');
    error.httpStatusCode = 400;
    return next(error);
  }
  res.send(file);
});

module.exports = router;

谁能告诉我 router.get 是什么?这样我就可以在回复中得到一张图片。

您可以简单地 statically serve uploads 文件夹。通过这样做,您不需要实际的 get-处理程序,而是定义 express.static-中间件

app.use(express.static('uploads'));

现在客户端只需向 http://yourServer/<imagename>-<timestamp> 执行请求,文件将自动提供。

编辑:

为了将生成的文件名发送给客户端,您可以执行以下操作:

您可以 return 包含生成的文件名的 json,而不是在您的 post 处理程序中执行 res.send(file);,然后客户端可以请求该文件名:

app.post("/upload", upload.single('image'), (req, res) => {
    res.json({uploadedFile: req.file.filename})
});

还有一件事:使用 filename 功能,您将丢失文件的扩展名。为了保留您可以做的扩展(确保 require path-模块):

filename: (req, file, cb) => {
    const extension = path.extname(file.originalname);
    cb(null, `${file.fieldname}-${Date.now()}${extension}`);
}

eol 的回答很好,但如果您需要保持访问权限,控制器可能看起来像这样:

res.writeHead(200,{'content-type':'image/jpg'});
fs.createReadStream('./image/demo.jpg').pipe(res);