哪個模塊更好套件這個任務nginx的上傳模塊或 本地clientbodyinfileonly或其他什麼東西?
我只是看看nginx-upload-module
,這是一個7歲 nginx的模塊來處理多部分請求。 Nginx多年來一直支持分段上傳,所以只要你沒有運行7年以上的版本,你就不需要改變你的nginx設置!
對於剩下的問題,我給你舉個例子,使用:
- Thumbnail生成縮略圖(您需要graphitemagick安裝,但你可以與任何其他的lib更換)
- Q輕鬆地同時生成不同的縮略圖,並擁有乾淨的代碼,無需回調金字塔
- Multer來處理文件上傳服務器端。
您可以使用其他庫來做同樣的事情,但是這會向您顯示一種輕鬆實現的方法。爲了這個例子,它全部在一個文件中。
var express = require('express');
var multer = require('multer');
var md5 = require('MD5');
var Q = require('q');
var Thumbnail = require('thumbnail');
var app = express();
var targetFolder = '/var/www/mysite/files/full/';
var thumbnailFolder = '/var/www/mysite/files/thumbs/';
var thumbnail = new Thumbnail(targetFolder, thumbnailFolder);
var makeThumbnail = Q.nbind(thumbnail.ensureThumbnail,thumbnail);
var thumbnailSizes = [30,96,128];
app.post('/upload', function(req,res,next) {
//Check the authentication here, this is the first middleware.
if(authenticated) {
next();
} else {
res.send(401);
}
}, multer({
dest: targetFolder,
rename: function (fieldname, filename) {
//Rename the file with it's name + date hash
return md5(filename + Date.now());
},
onFileUploadComplete: function(file, req, res) {
var resizePromises = [];
for(var i in thumbnailSizes) {
var p = makeThumbnail(file.name,thumbnailSizes[i],thumbnailSizes[i]);
resizePromises.push(p);
}
Q.all(resizePromises).done(function(){
// The file has been resized to the specified format.
res.send(200);
},function(err) {
console.log(err);
res.send(500);
// Error !
});
}
});
感謝您的回答'nginx-upload-module'並不像您想象的那麼古老。最後一次提交是在2014年12月5日https://github.com/vkholodkov/nginx-upload-module/tree/2.2。也許我會很快嘗試你的方法,但我有興趣通過nginx上傳。不幸的是'clientbodyinfileonly'不支持'multypart/formdata.'謝謝你的答案 – Erik 2015-04-12 07:37:36