我正在尝试解析服务器中的excel文件数据并且它工作正常但问题是它保存了我们在上传文件夹中的本地磁盘上传的文件,然后它正在读取数据。这是代码工作正常,但上传大型xlsx文件是个问题,因为它需要额外的内存,并创建与本地磁盘中的另一个文件相同。
server.route({
method: 'post',
path: `${(options.apiBase || '/xlsx/')}get`,
config: {
payload: {
output: 'stream',
parse: true,
allow: 'multipart/form-data'
}
},
handler: function (req, reply) {
try {
const data = req.payload;
if (data.file) {
let name = data.file.hapi.filename;
console.log("FIlename: " + name);
let path = __dirname + "/uploads/" + name;
let file = fs.createWriteStream(path);
data.file.pipe(file);
data.file.on('end', function (err) {
if (typeof require !== 'undefined')
XLSX = require('xlsx');
const workbook = XLSX.readFile(path);
console.log("row======>>>>");
const sheet_name_list = workbook.SheetNames;
const content =
XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]);
console.log(content);
var ret = {
filename: data.file.hapi.filename,
headers: data.file.hapi.headers
}
reply(JSON.stringify(content));
})
} catch (err) {
console.log('Err----------------------' + err);
// error handling
reply(Boom.badRequest(err.message, err));
}
}
});
next();
答案 0 :(得分:0)
您需要将config.payload.parse
设置为false。这将返回原始流。但要意识到,如果您要上传multipart/form-data
,则需要自行解析。
config: {
payload: {
output: 'stream',
parse: false,
allow: 'multipart/form-data'
}
}
这由subtext
模块处理。见https://github.com/hapijs/subtext/blob/0bf83af78e364518577913db1bbc9c27bc739d7a/lib/index.js#L67