casunley
casunley

Reputation: 13

Finding a Relative File Path to Parse an Excel File

I'm building a web app using Node.JS that at the very least should allow users to to upload excel spreadsheets (.xlsx) and then using an excel parser (currently using node-xlsx - https://www.npmjs.org/package/node-xlsx), I want to be able to find this file, parse it, and print its contents to the console. So far, I have the file uploaded and stored, but am having trouble specifying the file path my app should search down.

I believe my troubles are that I am trying to do this on the server-side, and I am telling my app to search through a users directory for this file when it does not have access.

Here is example code:

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

This produces the error:

return binding.open(pathmodule._makelong(path) stringtoflags(flags) mode) error: ENOENT, no such file or directory 'C\Users(file path on my local machine here)

Can anyone point out a way of doing this that I am missing? it has to do with fs methods I feel.

Thank you

Upvotes: 1

Views: 2422

Answers (1)

Adam C
Adam C

Reputation: 585

First of all, don't use the filename that user provided when saving the file - you will get duplicates and it could be a security risk (in general, never trust user provided data). Just use your own value instead - it is more standard to use your own naming convention to prevent duplicates or to use a tmp file provided by the OS.

To solve your issue, try:

Requiring path at the top of your file:

var path = require('path');

and changing the value of fullfile to:

fullfile = path.join(__dirname,fstream.path)

then pass fullfile to xlsx.parse:

var obj = xlsx.parse(fullfile);  

Upvotes: 1

Related Questions