我有来自客户端的文件,我必须在服务器端读取这些文件,然后发送回客户端进行下载,如何使用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 } ] }发布于 2016-11-02 11:33:59
我假设你正在尝试从你的JSON对象'fileData‘下载一个本地文件。下面的示例是用NodeJS编写的
首先,你需要把你的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
});发布于 2016-11-03 00:02:45
如果您查看多方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,并收集所有字段和文件并将其传递给回调,从而无需侦听表单上的任何事件。这是为了方便您读取所有内容,但一定要编写清理代码,因为这会将所有上传的文件写入磁盘,即使是您可能不感兴趣的文件。
您需要在每次请求后清理磁盘上的文件,否则这些文件将会累积。
https://stackoverflow.com/questions/40367916
复制相似问题