POST一个文件并获取它的修改版本

时间:2017-10-20 15:46:13

标签: javascript node.js express

我在一个小项目上遇到麻烦。让我们从我的职能目标开始:

  

我有Word文档&一个JSON,我合并数据以获得一个Word文档。

所以,我创建了一个基本的Webapp,它包含一个带有文件(word文档)和json文本编辑器的表单。一旦填满,我点击生成,我想立即下载生成的文件。

我创建了一个名为 / upload 的路由,使用POST方法处理文件。

但是,我迷失了如何懒洋洋地做这件事。 (用UUID POST,然后用UUID回复GET文件?这不是最干净的方法......或者我错了)

我想知道如何发布文件并通过单一操作下载新版本。

我做了这种事情,但我非常确定我能做得更好:

const JSZip = require('jszip');
const Docxtemplater = require('docxtemplater');

const fs = require('fs');
const path = require('path');
const formidable = require('formidable');

/*
* POST
* /upload
*/

exports.postFileUpload = (req, res) => {

  // Data receiver parameters
  var files = [],
      bufferArray = [],
      fields = [],
      errors = [],
      form = new formidable.IncomingForm();

  form.uploadDir = process.env.UPLOAD_DIR;
  form.type = true;
  form.keepExtensions = false;

  form.on('field', function(field, value) {
        fields.push([field, value]);
    })
  form.on('file', function(field, file){
    files.push(file);
  });
  form.on('end', function() {
    var jsonData = '';

    // Document processing ...
    files.forEach(function(file){
      let content = fs.readFileSync(file.path, 'binary');
       [...]
     // Once done i've got a nodebuffer of the generated file
        bufferArray.push(doc);
    });
  });

  // Process file receiving
  form.parse(req);

  res.status(200).end();
};

此外,我想知道是否可以在不保存的情况下操作文档,以摆脱这个问题:fs.readFileSync(file.path, 'binary'); 并停止使用磁盘存储。

我对node.js很陌生,所有答案都欢迎(也有折射建议)。

0 个答案:

没有答案