2015-06-19 20 views
5

Tôi đang cố lưu tên tệp đã tải lên vào db? cảm ơn. Về cơ bản làm thế nào tôi có thể vượt qua multer file.name vào cơ sở dữ liệu. nỗ lực của tôi đang sử dụng var này: var fileimage = file.name;node.js multer lưu tên tệp vào db

router.use(multer({ // https://github.com/expressjs/multer 
    dest: './uploads/', 
    limits : { fileSize:100000 }, 
    rename: function (fieldname, filename) { 
    return filename.replace(/\W+/g, '-').toLowerCase(); 
    }, 
    onFileUploadData: function (file, data, req, res) { 
    // file : { fieldname, originalname, name, encoding, mimetype, path, extension, size, truncated, buffer } 
    var params = { 
     Bucket: 'lemybucket01', 
     Key: file.name, 
     Body: data 
    }; 

    s3.putObject(params, function (perr, pres) { 
     if (perr) { 
     console.log("Error uploading data: ", perr); 
     } else { 
     console.log("Successfully uploaded data to myBucket/myKey"); 
     } 
    }); 
    }, 
    onFileUploadComplete: function (file) { 
    var fileimage = file.name; 
    } 
})); 

router.route('/') 
    //POST a new prod 
    .post(function(req, res) { 

     if(req.files.fileimage !== undefined){ // `image` is the field name from your form 
      //res.redirect("/uploads"); // success 
     }else{ 
      res.send("error, no file chosen"); 
     } 

     // Get values from POST request. These can be done through forms or REST calls. These rely on the "name" attributes for forms 

     var username = req.body.username; 

     //call the create function for our database 
     mongoose.model('Prod').create({ 
      username : username, 
      fileimage : fileimage 
     }, function (err, prod) { 
       if (err) { 
        res.send("There was a problem adding the information to the database."); 
       } else { 
        //Prod has been created 
        console.log('POST creating new prod: ' + prod); 
        res.format({ 
         //HTML response will set the location and redirect back to the home page. You could also create a 'success' page if that's your thing 
        html: function(){ 
         // If it worked, set the header so the address bar doesn't still say /adduser 
         res.location("prods"); 
         // And forward to success page 
         res.redirect("/prods"); 
        }, 
        //JSON response will show the newly created prod 
        json: function(){ 
         res.json(bloprodb); 
        } 
       }); 
       } 
     }) 
    }); 

Trả lời

2

Các req.files.fileimage !== undefined luôn là false?

Biến fileimage bạn khai báo trong những điều sau đây đã hạn chế phạm vi

onFileUploadComplete: function (file) { 
    var fileimage = file.name; 
} 

Nếu bạn muốn vượt qua một số dữ liệu (như fileimage) từ một trung gian khác bạn có thể sử dụng một cái gì đó như thế này.

onFileUploadComplete: function (file, req, res) { 
    var fileimage = file.name; 
    req.middlewareStorage = { 
    fileimage : fileimage//, 
    //otherKey : otherValue 
    } 
} 

và bạn có thể lưu trong db như

var fileimage = req.middlewareStorage.fileimage; 
mongoose.model('Prod').create({ 
    username : username, 
    fileimage : fileimage 
}, function (err, prod) { 
    // do some stuff 
}); 
+0

nó workd, danke – simpleton

Các vấn đề liên quan