通过HTTP请求发送文件

时间:2018-11-14 09:07:44

标签: javascript node.js

我试图接收文件并将其存储在multer存储中 Node js code

enter code here

app.post('/ createLicence',upload.single('photo'),function(req,res,next){         //任何逻辑都在这里

   console.log("filename" ,req.body.name)
    if (!req.file) {
        console.log("No file received");
        return res.send({
          success: false
        });

      } else {
        console.log('file received');

        var function_name = 'createLicence'
     var arguments_array =  [req.file.path,'Raghav','Mumbai','Approved']
     invoke = require('/Users/sanjeev.natarajan/fabric-samples/fabcar/invoke.js');
     invoke.invokechaincode(function_name,arguments_array)  
     return res.send({
        success: true 
      })
      }

});    

但是我没有收到文件i have send the request through postman

1 个答案:

答案 0 :(得分:0)

- 来自:https://www.npmjs.com/package/multer

为了使用multer包,首先必须定义一些参数,以便它可以在fileDirectory上使用。

在您的server.js中:

let multer = require('multer');

let storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, '/path/to/storage/')
  },
  filename: function(req, file, callback) {
    callback(null, file.originalname + '-' + Date.now());
  }
});

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

现在,配置您的路线

router.route('/your/payload')
  .post(authController.isAuthenticated, upload.any(), albumController.postFile)

请注意,upload.any()将允许您一次上传多个不同格式的文件。随时根据需要使用其他任何类型的upload.method()。

从这一点来看,multer已经在工作,但是您可能希望跟踪服务器上上传的文件。

因此,在您自己的模块中,逻辑很简单:

(我假设您使用猫鼬模型是因为您没有提供太多信息,但是无论如何这都不是相关的部分)

exports.postFile = async (req, res) => {
if (!req || !req.files || !req.files[0]) return res.status(400).send("Bad request.");

for (let i = 0; req.files[i]; i++) {
  await File.create({
    path: req.files[i],
    originalName: req.files[i].originalName,
    mimetype: req.files[i].mimetype,
    owner: req.user.userId
    }, (err, file) => {
    if (err) console.log("Something went wrong: " + err); else {
       // Do something with file
      }
    });
  }
  return res.status(418).send("I'm a teapot.");
}

此配置和中间件仅用于测试目的,切勿让任何人在未仔细处理该上载过程(文件完整性,资源管理等)的情况下将某些内容上载到您的服务器。开放的上传系统可以成为直接进入服务器的后门。

希望这会有所帮助, 问候。