Javascript 使用node.js从表单上载照片
我对node很陌生,需要一些指导和帮助。在进一步讨论之前,我尝试在没有任何其他框架(如Express)的情况下实现这一点。情况如下: 我有一个表单,用户可以将照片上传到节点中运行的服务器。该表单具有以下属性Javascript 使用node.js从表单上载照片,javascript,html,node.js,parsing,post,Javascript,Html,Node.js,Parsing,Post,我对node很陌生,需要一些指导和帮助。在进一步讨论之前,我尝试在没有任何其他框架(如Express)的情况下实现这一点。情况如下: 我有一个表单,用户可以将照片上传到节点中运行的服务器。该表单具有以下属性 <form action="/newImages/" method="post" enctype="multipart/form-data"> File goes : <input type="file" name="fileName"><br>
<form action="/newImages/" method="post" enctype="multipart/form-data">
File goes : <input type="file" name="fileName"><br>
<input type="submit" value="Submit">
</form>
然而,有些事情告诉我,我需要以不同的方式解析数据,因为数据的输出是不可读的。它看起来像:
“\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\t\b\n\f\u0014\r\f\u000b\u000b“
你有什么办法让它发挥作用吗?我还应该注意,我只上传.jpg
谢谢我认为你保存照片时错了。您不需要使用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();
});
看一看
M.似乎无法使用
querystring.parse来解析多部分数据
您必须编写自己的解析器或使用第三方模块,如
对于多方模块,代码如下所示:
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!');
});
}
在writeFile调用中将编码指定为二进制,就像我在一小时前的另一篇文章中告诉你的那样。。。
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!');
});
}