如何使用node.js获取图片上传进度,并在我的iPhone应用程序中使用它

我不知道如何使用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); } }); } }); }); }); 

像所有其他节点一样,有一个节点模块(名为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); }); 

看看代码 ,似乎这将返回一个200状态代码,上传数据在一个JSON对象。

至于你可以使用它的一个例子,请检查这个HTML文件 ,我发布了以下代码片段。 这段代码展示了如何使用来自客户端的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);