我已经设法使用Express在Node.js中进行文件上传工作,并且在代码中我正在检查用户是否正在尝试上传图像。
如果文件已成功上传,我想向用户显示一条消息,直接显示带有上传表单的HTML页面。如果用户尝试上传的文件不是图像,或者在上传过程中发生了其他事情,也应如此。
以下代码有效(res.send ...),但它会打开一个只包含该消息的新页面。
我的问题是:如何更改代码以便将邮件直接发送到HTML页面?如果它可能有用,我正在使用Jade。
提前致谢!
app.post('/file-upload', function(req, res, next) {
var fileType = req.files.thumbnail.type;
var divided = fileType.split("/");
var theType = divided[0];
if (theType === "image"){
var tmp_path = req.files.thumbnail.path;
var target_path = './public/images/' + req.files.thumbnail.name;
fs.rename(tmp_path, target_path, function(err) {
if (err) throw err;
fs.unlink(tmp_path, function() {
if (err) {
throw err;
res.send('Something happened while trying to upload, try again!');
}
res.send('File uploaded to: ' + target_path + ' - ' + req.files.thumbnail.size + ' bytes');
});
});
}
else {
res.send('No image!');
}
});
答案 0 :(得分:1)
根据我的理解,您正在尝试向已打开的浏览器窗口发送消息?
你可以做的一些事情,
对于我的钱选项#2可能是最安全的选择,因为没有启用javascript的客户端将能够使用它。至于可用性#1或#3将为最终用户提供更简化的外观。
答案 1 :(得分:1)
您可以使用WebSockets。我建议使用Socket.IO,它很容易使用。在客户端,您将拥有一个事件处理程序,它将使用JavaScript将新信息附加到该页面。
然后您可以让服务器例如说:
socket.emit('error', "Something happened while trying to upload, try again!");
,客户端将使用:
socket.on('error', function(data){
//alert?
alert(data);
});