Node.js使用强大的parsing表单数据

嘿家伙我是新来的节点,并试图build立一个文件/图像上传脚本。

我能够在我的VPS上设置节点,并遵循这个例子,我也设置了应用程序,它工作得很好。 https://coligo.io/building-ajax-file-uploader-with-node/它使用强大和快速

不过,我也喜欢parsing一个表单,人们可以添加他们的名字,file upload到包含他们的名字的文件夹。 我能够使用mkdirp获取文件夹创build工作,但是即使经过了许多小时的研究(强大的api,express api等等),我也无法得到表单来parsing名称。 我怀疑upload.js(将数据发送到节点应用程序)不起作用。

目前为每个上传文件创build了一个随机string的新文件夹,但我希望能够parsinginput的表单名称。

任何想法如何得到它的工作? 我会很感激任何帮助/提示。

app.js

var express = require('express'); var app = express(); var path = require('path'); var formidable = require('formidable'); var fs = require('fs'); var mkdirp = require('mkdirp'); var crypto = require("crypto"); app.use(express.static(path.join(__dirname, 'public'))); app.get('/', function(req, res){ res.sendFile(path.join(__dirname, 'views/index.html')); }); app.post('/upload', function(req, res){ var ordner = crypto.randomBytes(20).toString('hex'); mkdirp('/home/myfolder/fileupload/'+ordner, function (err) { if (err) console.error(err) else console.log(ordner) }); var form = new formidable.IncomingForm(); form.multiples = true; form.uploadDir = path.join(__dirname, '/'+ ordner); form.on('file', function(field, file) { fs.rename(file.path, path.join(form.uploadDir, file.name + Date.now()+'.jpg')); }); form.on('field', function(field, userName) { console.log(userName); }); form.on('error', function(err) { console.log('An error has occured: \n' + err); }); form.on('end', function() { res.end('success'); }); form.parse(req); }); var server = app.listen(3000, function(){ console.log('Server listening on port 3000'); }); 

谢谢

upload.js不变,我只是添加另一个input到视图。

你可以通过像POST这样通过POST发送参数来做到这一点

 app.post('/upload/:userName', function(req, res){ var username = req.params.userName mkdirp('/home/myfolder/fileupload/'+username, function (err) { if (err) console.error(err) else console.log(ordner) }); 

其余的代码几乎保持不变。

编辑:你的阿贾克斯看起来像这样

 var username = 'GetThisValueFromTheUser' $.ajax({ url: '/upload'+username, type: 'POST', data: formData, processData: false, contentType: false, success: function(data){ console.log('upload successful!'); } }); 

注意:您可以通过在POST或GET请求中使用/:参数来发送参数,然后您可以很容易地使用这些参数。