我对节点很新,需要一些指导和帮助。在我进一步讨论之前,我试图在没有像Express之类的任何其他框架的情况下做到这一点。情况如下:
我有一个表单,用户可以将照片上传到节点中运行的服务器。表单具有以下属性
<form action="/newImages/" method="post" enctype="multipart/form-data">
File goes : <input type="file" name="fileName"><br>
<input type="submit" value="Submit">
</form>
表单输入由此代码
处理 if (req.method == 'POST' && req.url == '/newImages/') {
console.log("Inside Post method");
var body = ''
req.on('data', function(data) {
body += data
})
req.on('end', function() {
var note = querystring.parse(body)
console.log(note)
fs.writeFile("./test.jpg",body, function(err){
if(err)
{
console.log(err);
}
else
{
console.log("The Picture was saved");
}
})
res.writeHead(302, {
'Content-Type':'text/plain',
'location':'/index.html'});
res.end('Found!');
})
}
然而,有些东西告诉我,我需要以不同的方式解析数据,因为它的输出是不可读的。看起来像 :
“\ n \ r \ n \ u0000的\ u0010JFIF \ u0000的\ U0001 \ U0001 \ U0001 \ u0000的\u0000
\ u0000的\ u0000的\ u0000C \ u0000的\ B \ u0006 \ u0006 \ u0007 \ u0006 \ u0005 \ b \ u0007 \ u0007 \ u0007 \吨\吨\ b \ñ\˚F\ u0014 \ r \˚F\ u000b \ u000b“
有关如何使其发挥作用的任何想法?我还应该注意,我只上传了.jpg。
由于
答案 0 :(得分:0)
我认为保存照片时你错了。您不需要使用fs.writeFile(),而是使用fs.rename。
这个cose适用于我的app.js:
app.post('/upload', function (req, res) {
var tempPath = req.files.file.path,
name = '',
targetPath = '';
fileExist = true;
fileNumber = 0;
var fileType = path.extname(req.files.file.name);
var fileName = path.basename(req.files.file.name,fileType);
while (fileExist) {
fileNumber_str = fileNumber.toString();
var current = fileName + "_" +fileNumber_str + fileType;
console.log("Controllo per "+current);
if (fs.existsSync(__dirname + "/images/orig/" + current)) {
console.log("--> Esiste");
fileNumber++;
} else {
var newPath = __dirname + "/images/orig/" + current;
console.log("nuovo nome : "+newPath);
fs.rename(tempPath, newPath, function(err) {
if (err) throw err;
//Ora creo il thumb
console.log("Upload completed!");
});
break;
}
}
res.redirect("/");
res.end();
});
看看。
微米。
答案 1 :(得分:0)
您似乎无法使用querystring.parse
解析多部分数据。
您必须编写自己的解析器或使用第三方模块,例如node-multiparty。
使用multiparty模块,代码将如下所示:
if (req.method == 'POST' && req.url == '/newImages/') {
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
var tmp = files.fileName[0].path;
fs.rename(tmp, '/your/dir/img.jpg', function(err) {
if (err) throw err;
console.log('success');
});
res.end('Found!');
});
}