No such file or directory error when uploading a file using Express-fileupload - Node.js

你说的曾经没有我的故事 提交于 2021-01-28 10:51:44

问题


I am currently trying to upload a pdf file, store this file in my directory under a name I can query, and store this name in an SQL table. I am using Express-fileupload, and I am getting the file, but when I try to move the file using .mv I get an Error: ENOENT: no such file or directory, open '/public/files/CLPs/minor_CLP.pdf' error. Here is the code for my post function:

app.post('/uploadCLP', isLoggedIn, function(req, res) {
    var communityID = req.user.communityID;

    console.log(req.files);

    var clpFile = req.files.clpFile;
    var clpName = communityID + "_CLP.pdf";

    clpFile.mv('/public/files/CLPs/' + clpName, function(err) {
        if(err)
            return console.log(err);
    });

    var updateQuery = ("UPDATE Community SET clpFile = ? WHERE communityID = ?");
    connection.query(updateQuery, [clpName, communityID], function(err, rows) {
        if(err) throw err;
        res.redirect(302, '/proposal');
    });
});

And here is the form from my EJS file where the function is called:

<div class="well">
    <form action="/uploadCLP" method="post" enctype="multipart/form-data">
        <div class="form-group">
            <label>Community Learning Plan</label>
            <p>Only upload Community Learning Plans in PDF format.</p>
            <input type="file" accept=".pdf" class="form-control" name="clpFile">
        </div>
</div>

Edited to show my server.js file as well:

// server.js

// get all the tools we need
var express  = require('express');
var session  = require('express-session');
var favicon = require('express-favicon');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var morgan = require('morgan');

var upload = require('express-fileupload');
var app      = express();
var port     = process.env.PORT || 1848;

var passport = require('passport');
var flash    = require('connect-flash');


require('./config/passport')(passport); // pass passport for configuration

app.use('/public', express.static('public'));

// set up our express application
app.use(morgan('dev')); // log every request to the console
app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

app.set('view engine', 'ejs'); // set up ejs for templating
app.use(upload());

// required for passport
app.use(session({
    secret: 'vidyapathaisalwaysrunning',
    resave: true,
    saveUninitialized: true
 } )); // session secret

app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session


require('./app/routes.js')(app, passport); 

app.listen(port);
console.log('Server running on port ' + port);

Additionally, you can see my project directory here:

I'm not sure if the problem is with how I'm setting the directory for the file to save in or if the problem is I'm trying to save the file under a different name. Any help or tips would be much appreciated! :)


回答1:


Because the path is using / in the beginning, it searches for the root path of that folder which is not the project's folder itself.

because the script is in the root folder of the project, the correct path should be 'public/files/CLPs/'



来源:https://stackoverflow.com/questions/49785890/no-such-file-or-directory-error-when-uploading-a-file-using-express-fileupload

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!