我不知道如何使用node.js获取当前的上传进度,并且不知道如何将进度值发送到我的iphone客户端应用程序。我目前有这样的代码,但它只保存图像文件并将图像文件名保存到数据库。
app.post('/event', function (req, res) {
fs.readFile(req.files.displayImage.path, function (err, data) {
var newPath = __dirname + '/uploads/' + req.files.displayImage.name;
fs.writeFile(newPath, data, function (err) {
if (!err) {
var pic = req.files.displayImage.name;
connection.query('INSERT INTO Event SET ?', {pic: pic}, function (error, result) {
if (error) {
res.send(error, 400);
} else {
res.send({insertId: result.insertId}, 200);
}
});
}
});
});
});
答案 0 :(得分:1)
与节点中的其他所有内容一样,有一个节点模块(名为node-upload-progress)。虽然我没有亲自使用它,但看起来非常稳固。由于您似乎正在使用Express
,我将在我的示例中执行相同的操作:
首先,您需要设置uploadHandler:
var app = express();
var uploadHandler = require('node-upload-progress');
uploadHandler.configure(function() {
return this.uploadDir = "" + __dirname + "/uploads";
});
app.post('/event', function (req, res) {
return uploadHandler.progress(req, res);
});
查看code,似乎这将返回200状态代码,上传数据位于json对象中。
至于您可以使用它的示例,请查看此html file,我将从中发布以下代码段。此代码段显示了如何使用客户端的ajax调用定期检查进度状态。
uploadIntervalID = setInterval(function(){
$.get('/progress?X-Progress-ID=' + xProgressID, function(data){
if(data.status === 'done'){
clearInterval(uploadIntervalID);
}
updateUploadStatus(data);
}).error(function(){clearInterval(uploadIntervalID)});
}, 250);