我正在使用Node.JS构建一个Web应用程序,至少应该允许用户上传excel电子表格(.xlsx),然后使用excel解析器(目前使用node-xlsx - {{3} }),我希望能够找到这个文件,解析它,并将其内容打印到控制台。到目前为止,我已经上传并存储了文件,但是在指定应用程序应该搜索的文件路径时遇到问题。
我相信我的麻烦是我试图在服务器端执行此操作,并且我告诉我的应用程序在没有访问权限的情况下在用户目录中搜索此文件。
以下是示例代码:
var fullfile;
app.post('/upload', function (request, response) {
var fstream;
request.pipe(request.busboy);
request.busboy.on('file', function (fieldname, file, filename) {
console.log('Uploading: ' + filename);
fstream = fs.createWriteStream('./storedFiles/' + filename);
file.pipe(fstream);
fstream.on('close', function () {
response.redirect('success');
console.log('Uploaded to ' + fstream.path);
fullfile=fstream.name;
var obj = xlsx.parse(__dirname + fullfile);
console.log(obj);
});
});
});
这会产生错误:
返回binding.open(pathmodule._makelong(path)stringtoflags(flags)模式) 错误:ENOENT,没有这样的文件或目录' C \ Users(我本地机器上的文件路径)
任何人都可以指出一种方法吗?它与我感觉到的fs方法有关。
谢谢
答案 0 :(得分:0)
首先,不要使用用户在保存文件时提供的文件名 - 您将获得重复项并且可能存在安全风险(通常,永远不会信任用户提供的数据)。只需使用您自己的值 - 使用您自己的命名约定来防止重复或使用操作系统提供的tmp文件更为标准。
要解决您的问题,请尝试:
要求文件顶部显示path
:
var path = require('path');
并将fullfile
的值更改为:
fullfile = path.join(__dirname,fstream.path)
然后将fullfile
传递给xlsx.parse
:
var obj = xlsx.parse(fullfile);