1

我在客户端使用聚合物并作为图像上传按钮:

<vaadin-upload
  form-data-name="file"
  max-files="1"
  id="fileUploadImage"
  method="POST"
  headers='{"Authorization": "bearer {{auth}}", "Content-Type": "multipart/form-data; boundary=XXXX"}'
  target="{{config_endpoint}}/rest/upload_file/uploadFile"
  nodrop
>
</vaadin-upload>

在服务器端,我使用 multer 上传图片:

const express = require("express");
const multer = require("multer");
var cors = require("cors");
const config = require("../../config");

const router = express.Router();
var corsOptions = {
  origin: config.origin, // '*'
  optionsSuccessStatus: 200
};
router.use(cors(corsOptions));

var storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, "../../uploads");
  },
  filename: function(req, file, cb) {
    const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
    cb(null, file.fieldname + "-" + uniqueSuffix);
  }
});

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

router.post("/uploadFile", uploads.single("file"), (req, res) => {
  console.log(req.files);
  console.log(req.body);
});
module.exports = router;

对于 req.files 和 req.body 我都有未定义的值,请参阅日志:

13:54:44 0|eod  | OPTIONS /rest/upload_file/uploadFile 200 0 - 0.553 ms
13:54:44 0|eod  | undefined
13:54:44 0|eod  | {}

我正在使用以下版本:“multer”:“^1.4.2”,nodejs v8.9.3

这是我的标题” 点击这里

怎么了 ?我错过了什么?顺便说一句,即使使用 Postman 我也遇到了同样的问题

4

3 回答 3

1

尝试使用 console.log(req.file) 而不是 (req.files),因为您使用的是 uploads.single('file')。仅当您使用多个文件时,请求才会存储在文件中(带有“s”)。否则它应该在“文件”上(当它是单次上传时)。我认为这可能就是这里发生的事情。

于 2020-07-01T11:09:24.373 回答
1

尝试

router.use(express.json());//this is required if you are sending data as json
router.use(express.urlencoded({extended:false}));
于 2020-07-01T11:18:10.527 回答
0

好的,我发现了问题.. 删除标题(身份验证除外)后,它可以工作了!(“Content-Type”不能手动设置——因为我们使用边界,并且在服务器端它寻找自动生成的边界)。

看起来是 Vaadin 上传错误

于 2020-07-02T15:16:54.553 回答