![](/img/trans.png)
[英]How do I upload images using MongoDB + Node.js (Express.js)?
[英]How to do upload with express in node.js
我的代碼是這樣的:
app.configure(function () {
app.use(express.static(__dirname + "/media"));
app.use(express.bodyParser({
keepExtensions: true
}));
})
app.post('/upload', function (req, res) {
console.log(req.files);
res.send("well done");
return;
})
螞蟻做的工作如下:
1.對progoress
事件有所了解,如何將處理程序綁定到progress
, complete
事件,我嘗試過req.files.on('progress', fn)
,但它不起作用
2我知道如何使用req.files
來獲取文件的信息,但是如何在上傳文件之前限制上傳文件的大小,或限制上傳圖像的分辨率?
您應該查看多部分中間件文檔 ,這是文件上載所涉及的文檔。
它表示通過“limit”選項設置限制,如果將“defer”選項設置為true,則可以聽取進度。 在這種情況下,上傳使用的表單將設置為您的請求的屬性。 然后,您將能夠收聽進度事件 。
所以你的代碼應該是這樣的(尚未測試):
app.configure(function () {
app.use(express.static(__dirname + "/media"));
app.use(express.bodyParser({
keepExtensions: true,
limit: 10000000, // 10M limit
defer: true
}));
})
app.post('/upload', function (req, res) {
req.form.on('progress', function(bytesReceived, bytesExpected) {
console.log(((bytesReceived / bytesExpected)*100) + "% uploaded");
});
req.form.on('end', function() {
console.log(req.files);
res.send("well done");
});
})
我的項目中有一個加載文件的函數,可能對你有所幫助:
var app = express.createServer(
express.bodyParser({uploadDir: "public/files", keepExtensions: true})
, express.cookieParser()
, express.session({ secret: 'keyboard cat' })
);
app.post('/upload', function (req, res) {
var msg = '';
var img = '';
//console.log("type: "+req.files.image.type);
//console.log("size: "+req.files.image.size);
if(req.files.image.type != 'image/png' && req.files.image.type != 'image/jpeg' && req.files.image.type != 'image/gif')
{
msg = 'Invalid format, accepts only: jpg, png and gif.<br/>';
}
if(req.files.image.size > 307200) // 300 * 1024
{
msg += 'File size no accepted. Máx: 300kb.<br/>';
}
if(msg == '')
{
if(diff > 0)
{
name = name.substring(name.length-diff, name.length);
}
var date = new Date();
var name = req.files.image.name;
var diff = name.length - 20;
var rnd_number = Math.floor(Math.random()*101);
var new_name = date.format('yyyymmdd_HHMMssl_') + rnd_number +'_'+ name;
fs.renameSync(req.files.image.path, 'public/files/img'+new_name);
img = '<img src="public/files/img/'+new_name+'" width="100%"/>';
}
res.render('admin/upload', {layout: false, img: img, msg: msg});
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.