NodeJS 使用MulterAzureStorage时请求正文为空

2q5ifsrm  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(214)

我们有一个应用程序,其中我们使用一个表单将信息和文件发送到我们的blob存储。我们使用的是MulterAzureStorage包。与此同时,我们正在使用中间件,这样用户就可以验证自己。身份验证中间件之前已经使用过,并且已知其工作正常。当我们在没有身份验证和multer中间件的情况下遵循工作流时,req.body参数将填充表单的数据(包括文件)。不幸的是,当我们添加这两个中间件时,req.body是空的,没有文件存储在blob存储的容器中。
代码的结构如下所示:

const azureStorage = new MulterAzureStorage({
  connectionString: AZURE_CONNECTION_STRING,
  accessKey: AZURE_ACCESS_KEY,
  accountName: AZURE_STORAGE_ACCOUNT_NAME,
  containerName: CONTAINER_NAME,
  blobName: BLOB_NAME,
});

const upload = multer({
  storage: azureStorage
});

router.post('/verzoek',[auth,upload.any()], async (req, result) => {
   console.log(req.body)
   // Our code continues below but it is removed for simplicity
}

由于我们可以在没有中间件的情况下读取req.body,因此我们认为请求是正确的。然而,为了确保,post请求如下所示:

const request = new FormData();

// At this point we filled the variable request but we removed it for simplicity

$.ajax({
          async: true,
          method: 'POST',
          url: '/aanvragen/verzoek',
          data: request,
          cache: false,
          processData: false,
          contentType: false,
            
          xhr: function () {
              var xhr = new XMLHttpRequest();
              return xhr;
          }
      }).done(function (result) {
          if (result == "Succes") {
              // Activate some classes
          } else {
              // An alert
          }
      }).fail(function (xhr, status) {
          // An error message
      });

总而言之,中间件出现了问题,请求的主体没有内容。我们尝试了一些建议,但没有任何效果。希望有人能帮助我们找到问题!感谢您的评分

e7arh2l6

e7arh2l61#

  • 我在Azure Portal中创建了存储帐户并创建了一个容器。

  • 检查下面的代码,为我工作。
const express = require('express');
const multer = require('multer');
const { BlobServiceClient } = require('@azure/storage-blob');
const app = express();
const authMiddleware = (req, res, next) => {
  next(); 
};
const multerMiddleware = multer().single('file');
const connectionString ='#######';  
const containerName = 'pavan123';
app.post('/upload', authMiddleware, multerMiddleware, async (req, res) => {
  const file = req.file;
  const blobServiceClient = BlobServiceClient.fromConnectionString(connectionString);
  const containerClient = blobServiceClient.getContainerClient(containerName);
  const blobName = file.originalname;
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);
  const uploadResponse = await blockBlobClient.uploadData(file.buffer);
  res.send('File uploaded successfully.');
});
const port = 3000;  
app.listen(port, () => {
  console.log(`Server started on port ${port}`);
});
  • 当我运行上面的代码时,我得到了下面给出的结果。

  • 命令需要使用npm install express multer @azure/storage-blob

  • 我使用postmanPOST表单数据文件发送到container。

  • 我刚刚查看了文件是否上传到我的云存储账户。

相关问题