如何在nodejs中的单个服务调用中上传和下载文件?

Posted

技术标签:

【中文标题】如何在nodejs中的单个服务调用中上传和下载文件?【英文标题】:How to upload and download a file in a single service call in nodejs? 【发布时间】:2018-10-29 15:54:51 【问题描述】:

我可以通过邮递员上传文件并在两个不同的服务中从服务器下载文件..但我需要的是..在一次调用中我应该能够将文件上传到服务器,然后在执行一些操作后执行一些操作操作我应该能够自动下载文件。 这是我的代码。

我的第一次服务(文件上传操作)

  var express = require('express');
  var fs = require('fs');
  var formidable = require('formidable');
  var router = express.Router();
  /* GET home page. */
  router.post('/', function(req, res, next) 

  var form = new formidable.IncomingForm();
  form.uploadDir="./file"
  form.keepExtensions=true;
  form.maxFileSize=10*1024*1024;
  form.multiples=false;
  form.parse(req, function (err, fields, files) 
  res.write('File uploaded');
  res.end();
  );
  );
  module.exports = router;  

下载服务

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


router.get('/', function(req, res, next) 
    var file = './file/myOutput.txt';
      var name = 'ENC.txt'
      res.download(file, name);
);

module.exports = router;

现在我需要将这两个服务合二为一吗?

【问题讨论】:

【参考方案1】:
var express = require('express');
var formidable = require('formidable');

var app=express();

async function calculation(parameters)

    if(parameters)
    
         //Here you can do calculation depending upon parameter values
    
    else
    
         //Display error or as per your choice
    


app.get('/',function(req,res)
    res.sendFile(__dirname+'/index.html');
);
async function cal(res,file,form)
        
            try

                    const data = await calculation(true)
                    if(data)
                        res.set(
                            'Location' : __dirname+'/index.html',
                        );
                        res.download( __dirname+file.name);
                    

            
            catch(error)
            
                console.log(error);
            
        
app.post('/',function (req,res)
    var form = new formidable.IncomingForm();

    form.parse(req);

    form.on('fileBegin',function(name,file)
        file.path = __dirname+file.name;
        console.log("Uploading");
    );

    form.on('file',
    function(name,file)
    
        console.log('Uploaded ',file.name);
        cal(res,file);

    );

);

希望对你有帮助

【讨论】:

以上是关于如何在nodejs中的单个服务调用中上传和下载文件?的主要内容,如果未能解决你的问题,请参考以下文章

并行处理nodejs中的多个文件

如何将所有格式的excel文件上传/下载到azure blob存储Nodejs服务器端

nodejs上传的文件如何使用

使用 Websockets 和 Nodejs 上传文件

最近在研究nodejs如何实现文件上传功能

Linux下使用libcurl实现FTP单个文件上传下载功能