我有来自客户端的文件,我必须在服务器端读取并发送回客户端进行下载,如何使用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 } ] }
答案 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 字段和文件被收集并传递给回调,删除 需要听取表格上的任何事件。这是为了方便 你想读一切,但一定要写清理代码,如 这会将所有上传的文件写入磁盘,即使您可能没有 感兴趣的。
您需要在每次请求后清理磁盘上的文件,否则它们会累积。