创建一个将文件中继到另一个服务器(multer)的节点服务器

问题描述 投票:0回答:1

在我的项目中,设置是:

  1. 客户端 -> 中继服务器
  2. 中继服务器->资源服务器

我正在创建一个 API,它将在资源服务器上保存数据。因此,我必须先将文件上传到我的中继服务器。在中继服务器中,我使用 multer 解析多部分表单数据,然后将文件发送到我的资源服务器

const multer = require('multer')
const axios = require("axios");
const upload = multer();


router.post('/file', upload.single('featureData'), function (req, res, next) {
  
  const requestData = new FormData()
  requestData.append('featureData', req.file.buffer, {
    filename: req.file.originalname,
    encoding: req.file.encoding,
    mimeType: req.file.mimeType
  })

  // sending file to resource server
  axios.post(process.env.HOST + '/file', requestData, {
    method: 'post',
    // headers: {...requestData.getHeaders(), 'Content-Length': requestData.getLengthSync()}
  })
    .then(function (response) {
      console.log("file upload successful;")
      return void res.status(200).json("got file");
    })
    .catch(function (error) {
        console.log(error)
        // return void res.status(error.response.status).json(error.response.data);
      }
    )
})

在我的资源服务器中,我遇到两个问题:

  1. 我正在使用主体解析器来增加资源主体的限制,但它不允许我发送大文件
app.use(bodyParser.raw({
  limit: '50mb',
  extended: true
}));
app.use(bodyParser.json({
  limit: '50mb',
  extended: true
}));
app.use(bodyParser.text({
  limit: '50mb',
  extended: true
}));
app.use(bodyParser.urlencoded({
  limit: '50mb',
  extended: true
}));
  1. 我正在以字符串形式获取文件。我获取文件的唯一方法是通过执行

JSON.parse(JSON.stringify(req.body))

我的资源服务器中的控制器:

const multer = require('multer')
const fs = require('fs')
const storage = multer.diskStorage({
  destination: './public/data/files/',
  limits: { fileSize: 1000000000 }
  // filename: function (req, file, cb) {
  //   cb(null, Date.now() + '.json') //Appending .jpg
  // }
});

const upload = multer(storage)

const router = express.Router();

router.post('/file', upload.any(), function (req, res) {
  ...
});

我实际上想做的是从资源服务器中的请求对象获取文件,然后将文件保存在文件系统中。我不明白我做错了什么。有人可以帮助我吗?

node.js file-upload upload multipartform-data multer
1个回答
0
投票

您的资源服务器中可能有拼写错误,

const upload = multer({ storage });
© www.soinside.com 2019 - 2024. All rights reserved.