如何使用nodejs读取文件内容?

时间:2016-11-01 20:14:10

标签: javascript node.js file-upload

我有来自客户端的文件,我必须在服务器端读取并发送回客户端进行下载,如何使用nodejs实现该任务。我尝试使用fs,但我收到了一些错误。

console.log(data)将作为空对象

server.js

   var multiparty = require('multiparty');

var data = new multiparty.Form();
export function create(req, res) {

 data.parse(req, function(err, fields, files) {
   console.log(files);
    var fileContent = fs.readFileSync(files.file[0].path,'utf8');
     res.json(fileContent   );
    });
}

router.js

var express = require('express');
var controller = require('./fileUpload.controller');

var router = express.Router();

router.post('/fileUpload',controller.create);


module.exports = router;

FILEDATA

{ file:
   [ { fieldName: 'file',
       originalFilename: 'sco_poc.bpmn',
       path: 'C:\\Users\\9u\\AppData\\Local\\Temp\\f4DG8L7nCpNyNvVPYqGPkd44.bpmn',
       headers: [Object],
       size: 11078 } ] }

2 个答案:

答案 0 :(得分:0)

我假设您正在尝试从JSON对象'fileData'下载本地文件的路径。我的下面的例子是用NodeJS编写的

首先,您需要对JSON对象进行字符串化

    var jsonString = JSON.stringify({ file:
   [ { fieldName: 'file',
       originalFilename: 'sco_poc.bpmn',
       path: 'C:\\Users\\9u\\AppData\\Local\\Temp\\f4DG8L7nCpNyNvVPYqGPkd44.bpmn',
       headers: [Object],
       size: 11078 } ] });
//console.log(jsonString)//print jsonString contents

其次,将其解析为JavaScript对象

var jsonObj = JSON.parse(jsonString);
//console.log(jsonObj); //print jsonObj contents

第三,从jsonObj

获取路径
var path = jsonObj.file[0].path;

最后,阅读(本地)文件

fs.readFile(path,function(err,data){
        var fileData="";
        fileData+=data;
        res.writeHead(200, {
            'Location': '<if needed>',
            'Content-Type':'<expected content-type>'
        });
        res.end(fileData); //ends response, and sends to client
    });

答案 1 :(得分:0)

如果您在这里查看多方NPM页面上的第一个示例:https://www.npmjs.com/package/multiparty,您将看到需要为每个新请求运行此操作,而不仅仅是一次性重复使用:

var form = new multiparty.Form();

所以,首先将其移动到您的请求处理程序中。然后,如果您不确定如何使用结果,我建议您添加:

console.log(fields, files);

而且,这应该会告诉你实际拥有的数据。

仅供参考,你可以看到解析中的错误:

form.on('error', function(err) {
  console.log('Error parsing form: ' + err.stack);
});

另外,请注意文档中的此声明:

  

如果提供了cb,则autoFields和autoFiles设置为true和all   字段和文件被收集并传递给回调,删除   需要听取表格上的任何事件。这是为了方便   你想读一切,但一定要写清理代码,如   这会将所有上传的文件写入磁盘,即使您可能没有   感兴趣的。

您需要在每次请求后清理磁盘上的文件,否则它们会累积。