2016-08-14 3 views
0

Gibt es eine problom mit meinem Knoten Upload-Datei Code:NodeJS Bild hochladen Code: Fehler: ENOENT: keine solche Datei oder das Verzeichnis

 app.post("/process/:year/:month", function(req,res){ 

     const dataDir = __dirname + '/public/data'; 
     const photoDir = dataDir + '/upload-logo'; 

     fs.stat(dataDir, function(err, stat) { 
      if(err == null) { 
       console.log('File exists'); 
       return; 
      } else if(err.code == 'ENOENT') { 
       // file does not exist 
       fs.mkdirSync(dataDir); 
       return; 
      } else { 
       console.log('Some other error: ', err.code); 
       return; 
      } 
     }); 

     fs.stat(photoDir, function(err, stat) { 
      if(err == null) { 
       console.log('File exists'); 
       return; 
      } else if(err.code == 'ENOENT') { 
       // file does not exist 
       fs.mkdirSync(photoDir); 
       return; 
      } else { 
       console.log('Some other error: ', err.code); 
       return; 
      } 
     });   

     try{ 
      //store the data to the database 
      console.info('Received contact from ' + req.user.local.username + " <" + req.body.email + '>'); 


      console.log('the file uploaded: ' , JSON.stringify(req.body)); 
      const form = new formidable.IncomingForm(); 
      form.parse(req,function(err,fields,files){ 

       if(err){return res.redirect(303, '/404');} 
       const photo = files.photo; 

       const timeDir = `${req.params.year}${req.params.month}`; 
       const thedir = photoDir + `/${req.params.year}${req.params.month}`;//prevent uploading file with the same name 

       fs.stat(thedir, function(err, stat) { 
        console.log('stat parts begins...'); 
        if(err == null) { 
         console.log('File exists'); 
         return; 
        } else if(err.code == 'ENOENT') { 
         // file does not exist 
         console.log('the file does not exist.now creating...'); 
         fs.mkdirSync(thedir); 

         return; 

        } else { 
         console.log('Some other error: ', err.code); 
         return; 
        } 
       }); 

       const photoName = Date.now() + photo.name; 
       const fullPath = thedir + '/' + photoName; 

       console.log('the dir is :' + thedir); 
       console.log(photo.name,photo.path,fullPath); 
       fs.renameSync(photo.path, fullPath);//rename or move the file uploaded;and photo.path is the temp file Formidable give 

       if(req.user){ 
        function saveFileInfo(){ 

         const user = req.user; 
         user.local.logo = timeDir + '/' + phontoName; 
         user.save(function(err){ 
          if(err){throw err} 
          req.flash('success','Upload your logo successfully'); 
          res.redirect('/user/profile'); 
         }); 

        } 
        // saveFileInfo('upload-photo', fields.email,req.params.year,fields.params.year,fields.params.month,path); 
       }else{ 
        console.log('user not login'); 
        req.flash('eror','You need to login first to upload your logo'); 
        res.redirect(303, '/login'); 
       } 

       //console.log('received fields:', fields); 
       //console.log('received files:', photo.name); 

      }); 

      req.flash('success', 'Uploading successfully!') 

      return res.xhr ? res.render({success: true}) : 
       res.redirect(303, '/success'); 
     } catch(ex){ 
      return res.xhr ? 
       res.json({err: 'Database error.'}): 
       res.redirect(303, '/db-error'); 
     } 
    }); 

oben Code gab mir Fehler:

fs.js:681 
    return binding.rename(pathModule._makeLong(oldPath), 
       ^

Error: ENOENT: no such file or directory, rename '/var/folders/vq/cdlwyckx68zdf586bd3c789h0000gn/T/upload_2e1c480cfbdf943fe1dd45dbb2ccc37e' -> '/Users/frank25184/Desktop/nodejs/nodeForm-team/public/data/upload-logo/20167/147114292564330682361630021890.jpg' 
    at Error (native) 
    at Object.fs.renameSync (fs.js:681:18) 
    at /Users/frank25184/Desktop/nodejs/nodeForm-team/routes.js:496:24 
    at IncomingForm.<anonymous> (/Users/frank25184/Desktop/nodejs/nodeForm-team/node_modules/formidable/lib/incoming_form.js:105:9) 
    at emitNone (events.js:67:13) 
    at IncomingForm.emit (events.js:166:7) 
    at IncomingForm._maybeEnd (/Users/frank25184/Desktop/nodejs/nodeForm-team/node_modules/formidable/lib/incoming_form.js:553:8) 
    at /Users/frank25184/Desktop/nodejs/nodeForm-team/node_modules/formidable/lib/incoming_form.js:230:12 
    at WriteStream.<anonymous> (/Users/frank25184/Desktop/nodejs/nodeForm-team/node_modules/formidable/lib/file.js:70:5) 
    at WriteStream.g (events.js:260:16) 
    at emitNone (events.js:72:20) 
    at WriteStream.emit (events.js:166:7) 
    at finishMaybe (_stream_writable.js:481:14) 
    at afterWrite (_stream_writable.js:355:3) 
    at onwrite (_stream_writable.js:345:7) 
    at WritableState.onwrite (_stream_writable.js:89:5) 

Ich habe versucht, für einen halben Tag. aber es ist nicht gelungen. zeige diesen Fehler immer an. aber ich habe fs.stat() Funktion das thedir Verzeichnis
jedermann zu machen wissen, was hier vor sich geht, dank

Antwort

0

Ich bin nicht genau verstanden, wie Sie speichern Dateien hochladen wollen, so kann es sein Problem.

let async = require('async'); 

const dataDir = __dirname + '/public/data'; 
const tempDir = __dirname + '/public/temp'; 
... 
function checkDir(dir, callback) { 
    fs.stats(dir, function(err, stats) { 
     if (!err) 
      return callback(); 

     if (stats.isFile()) 
      return callback(new Error(dir + ' is file')); 

     if (err.code != 'ENOENT')  
      return callback(err); 

     fs.mkdir(dir, callback); 
    }) 
} 
... 
async.each([dataDir, tempDir], checkDir, (err) => throw err); 
... 
function isAuth(req, res, next) { 
    if (req.user) 
     return next(); 

    console.log(req.url, ': user not login'); 
    req.flash('error','You need to login first to upload your logo'); 
    res.redirect(303, '/login');  
} 

// Check login user in middleware isAuth 
// Error pass by Error handler middleware 
app.post("/process/:year/:month", isAuth, function(req, res, next){ 
    console.info('Received contact from ...'); 
    console.log('the file uploaded: ', JSON.stringify(req.body)); 

    const form = new formidable.IncomingForm(); 
    form.uploadDir = tempDir; 
    form.parse(req, function (err, fields, files) { 
     if(err) 
      return next (err); 

     const photo = files.photo; 
     const targetDir = dataDir + `/${req.params.year}${req.params.month}/`; 
     const targetPath = targetDir + '/' + targetname + Date.now() + photo.name; // ??? 

     async.Series([ 
      function(callback) { checkDir(targetDir, callback); }, 
      function(callback) { fs.rename(tempDir + '/' + photo, targetPath, callback); }, 
      function(callback) { req.user.local.logo=targetPath; req.user.save(callback); } 
     ], function (err) { 
      if (err) 
       return next(err); 

      req.flash('success', 'Uploading successfully!') 
      return res.xhr ? 
       res.render({success: true}) : 
       res.redirect(303, '/success'); //? res.redirect('/user/profile'); 
     }); 
    }); 
});  

// send error to user 
app.use(function(err, req, res, next) { 
    req.flash('error', err.message); 
    return res.xhr ? ... 
}) 
Verwandte Themen