用js上传文件并在数据库中存储表单信息(mysql)

我正在build立一个网站,用户需要填写信息的名字,姓氏,个人资料图片,数字等等…我已经编码的forms,我正在寻找一种方式与节点js上传图像在一个特定的目录(或一个默认的目录),并存储用户填入我的数据库的信息。 我使用节点js和Express与MySQL。

更新:

(我使用了强大的包和util包)。 请注意,对于图像部分,我只需要path(您将在输出部分看到它)。

表格代码:

<form method="post" action="upload" enctype="multipart/form-data"> <fieldset> <input type="file" accept="image/*" name="image" required /><br/> <label for="Prenom">Prénom: </label> <input type="text" name="user_prenom" id="Prenom" required /><br/> <label for="Nom">Nom: </label> <input type="text" name="user_nom" id="Nom" required /><br/> <label for="Mail">E-Mail: </label> <input type="email" name="user_mail" id="Mail" required/><br/> <label for="Pays">Pays: </label> <input type="text" name="user_pays" id="Pays" required/><br/> <label for="Ville">Ville: </label> <input type="text" name="user_ville" id="Ville" required/><br/> <label for="Num">Numéro: </label> <input type="tel" name="user_telephone" id="Num" /><br/> <input type="submit" /> </fieldset> </form> 

处理:

 router.post('/upload', function(req, res) { processFormFieldsIndividual(req, res); }); function processFormFieldsIndividual(req, res) { //Store the data from the fields in your data store. //The data store could be a file or database or any other store based //on your application. var fields = []; var form = new formidable.IncomingForm(); form.uploadDir = "/public/photo_utilisateurs"; //Call back when each field in the form is parsed. form.on('field', function (field, value) { fields[field] = value; }); //Call back when each file in the form is parsed. form.on('file', function (name, file) { fields[name] = file; //Storing the files meta in fields array. //Depending on the application you can process it accordingly. }); //Call back for file upload progress. form.on('progress', function (bytesReceived, bytesExpected) { var progress = { type: 'progress', bytesReceived: bytesReceived, bytesExpected: bytesExpected }; //Logging the progress on console. //Depending on your application you can either send the progress to client //for some visual feedback or perform some other operation. }); //Call back at the end of the form. form.on('end', function () { res.writeHead(200, { 'content-type': 'text/plain' }); res.write('received the data:\n\n'); res.end(util.inspect({ fields: fields })); }); // var user = JSON.parse(fields); // connection.query('INSERT INTO Utilisateurs (user_nom, user_prenom, user_mail, user_phone, user_pays, user_ville) VALUES ("' + user.user_nom + '", "' + user.user_prenom + '", "' + user.user_mail + '", "' + user.user_pays + '", "' + user.user_ville + '", "' + user.user_telephone + '")', // function selectCb(err, results, fields) { // if (err) throw err; // else res.send('success'); // }); form.parse(req); } 

输出

收到的数据:

 { fields: [ user_prenom: 'dfw', user_nom: 'efwe', user_mail: 'efew@fref', user_pays: 'efwe', user_ville: 'efwe', user_telephone: '4380564324', image: File { domain: null, _events: {}, _eventsCount: 0, _maxListeners: undefined, size: 518, path: '/tmp/upload_e611ea0745206682b26c208d816dc604', name: '1462507431_play_now_sign_youtube_video.svg', type: 'image/svg+xml', hash: null, lastModifiedDate: Mon May 09 2016 00:16:24 GMT-0400 (EDT), _writeStream: [Object] } ] } 

您可以简单地声明全局variables并将表单文件分配给它。 并在你想要的地方使用它。

 var data = util.inspec({ data: fields }); console.log(data); }); 
 form.on('end', function () { res.writeHead(200, { 'content-type': 'text/plain' }); res.write('received the data:\n\n'); // console.log(fields.name+'-'+fields.nickname); var values={ name:fields.name, nickname:fields.nickname, email:fields.email, password:fields.password, dob:fields.dob, gender:fields.gender, phoneno:fields.phone }; connection.query('INSERT INTO users SET ?', values, function(err,req,res){ if(err){ console.log('Connection result error '+err); } else{ console.log('Success'); } }); res.end(); });