嘿伙计们我是节点新手,并尝试设置文件/图片上传脚本。
我能够在我的VPS上设置节点,并按照这个例子我也设置了应用程序并且它运行良好。 https://coligo.io/building-ajax-file-uploader-with-node/ 它正在使用强大而快速的
但是,我还想解析一个表单,人们可以在其中添加自己的名字,并将文件上传到包含其名称的文件夹中。 我能够使用mkdirp来创建文件夹,但是即使经过数小时的研究(强大的api,表达api等),我也无法获得解析名称的表单。 我怀疑upload.js(将数据发送到节点应用程序)不起作用。
目前,为每次上传创建了一个带有随机字符串的新文件夹,但我希望能够解析输入的表单名。
知道如何让它发挥作用吗?我很感激任何帮助/提示。
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没有变化,我只是在视图中添加了另一个输入。
答案 0 :(得分:0)
您可以通过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)
});
你的其余代码几乎保持不变。
编辑:你的ajax看起来像这样
var username = 'GetThisValueFromTheUser'
$.ajax({
url: '/upload'+username,
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(data){
console.log('upload successful!');
}
});
注意:您可以在POST或GET请求中使用/:参数发送参数,从那时起,您可以轻松地使用这些参数。