2016-11-01 5 views
0

У меня есть файл от клиента, который я должен прочитать на стороне сервера и отправить обратно клиенту для загрузки. Как я могу выполнить эту задачу с помощью nodejs. Я пробовал с fs, но я получаю некоторую ошибку.Как читать содержимое файла с помощью nodejs?

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 } ] } 
+1

'некоторая ошибка'? Какую точную ошибку вы получаете? Можете ли вы показать больше соответствующего кода? Единственная ошибка, которую я вижу, может происходить в вашем коде, будет, если 'fs.readFile()' терпит неудачу. Если это так, то либо имя файла/путь неверно, файл не существует, либо у вас нет прав на чтение этого файла. Точный код ошибки, который он предоставляет, скажет вам, что это такое. Кроме того, ваш 'throw err' не делает ничего полезного, поскольку он просто асинхронно переводит в подсистему' fs.readFile() ', где невозможно обработать или уловить эту ошибку. Итак, начните, по крайней мере, запустив ошибку. – jfriend00

+0

Я получаю 'TypeError: Не могу прочитать файл свойства 'undefined ' – hussain

+0

Это звучит как req.файлы не так, как вы думаете. – jfriend00

ответ

0

Я предполагаю, что вы пытаетесь вниз загрузите локальный файл по пути из вашего объекта JSON «fileData». Мой пример ниже написано в NodeJS

Во-первых, вам нужно будет stringify ваш JSONObject

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 
    }); 
+0

получение этой ошибки 'var path = jsonObj.file [0] .path; ^ ТипError: Не удается прочитать свойство '0' of undefined ' – hussain

0

Если вы посмотрите на самый первый пример на многопартийной НОЙ странице здесь: https://www.npmjs.com/package/multiparty, вы увидите, что вам нужно запустить эту процедуру для каждого нового запроса, а не только один раз, что вы повторно снова и снова:

var form = new multiparty.Form(); 

Итак, для стартера переместите это в свой обработчик запроса. Затем, если вы не знаете, как использовать результаты, я хотел бы предложить вам добавить следующее:

console.log(fields, files); 

И это должно показать вам, что данные, которые вы на самом деле есть.

FYI, вы можете увидеть ошибки в разборе с этим:

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

Кроме того, обратите внимание, это заявление из документации:

If cb is provided, autoFields and autoFiles are set to true and all fields and files are collected and passed to the callback, removing the need to listen to any events on form. This is for convenience when you want to read everything, but be sure to write cleanup code, as this will write all uploaded files to the disk, even ones you may not be interested in.

Вам нужно будет очистки файлов на диске после каждого запроса или они будут накапливаться.

Смежные вопросы